Loading

01、Git入门指引

1、Git简史

    Linux内核开源项目有着为数众广的参与者。一开始整个项目组使用BitKeeper来管理和维护代码。2005年,BitKeeper不再能免费使用,这就迫使Linux开源社区开发一套属于自己的版本控制系统。
    自诞生于2005年以来,Git日臻成熟完善,它的速度飞快,极其适合管理大型项目,它还有着令人难以置信的非线性分支管理系统,可以应付各种复杂的项目开发需求。
    从这里我们可以看出,大佬们的思路就是。没有合适的东西,就做一个。

2、Git、GitHub与GitLab

    Git:是一个版本控制软件
    GitHub与GitLab都是用于管理版本的服务端软件
        GitHub提供免费服务(代码需公开)及付费服务(代码为私有)
        GitLab用于在企业内部管理Git版本库,功能上类似于GitHub

3、Git文件存储

3.1、增量的文件存储

    
    如上图,常见于SVN的版本控制,是增量式的文件存储。例如:version 1 的时候有三个文件 A、B、C,version 2相比较于version 1 只有文件A C发生了变化,则只记录相关的增量变化内容。

3.2、全量的文件存储

    
    如上图,version 1 与 version 2相比较文件A C发生了变化,则version 2 里面存储文件A1与文件C1,这里是一个全量的文件。由于文件B没有发生变化,所以在version 2 的B文件则通过指针的形式指向version 1 中的B文件。
    所以这就是git与传统的svn的存储的区别。

3.3、Git的基础

  •     直接记录快照、而非差异比较
  •     近乎所有的操作都在本地执行
  •     时刻保持数据的完整性
  •     多数操作都是添加数据的操作
  •     文件的三种状态
    1. 已修改(modified)
    2. 已暂存(staged)
    3. 已提交(committed)

4、Git的文件状态

    
    Git文件
        被版本库管理的文件
    已修改
        在工作目录修改的Git文件
    已暂存
        对已修改的文件执行Git暂存操作,将文件存入暂存区
    已提交
        将已暂存的文件执行Git提交操作,将文件存入版本
    未追踪
        未被版本库管理的文件
 
    我们在工作区中进行文件的编辑,编辑之后文件状态是未追踪或者已修改。通过git add 的命令操作,将文件存于暂存区。在通过git commit命令则将文件提交到版本库。

5、软件安装

    登录https://git-scm.com/网站下载相关的git安装包。这里以windows操作系统为例。不同的操作系统下载不同的版本安装即可。
    
    安装完成之后,在任意位置鼠标右键之后就会多出一个Git Bash Here,这个是Git的命令行执行入口。
        
    如果想使用GUI工具,则可以另外下载TortoiseGit工具,该工具类似于TortoiseSVN。安装这个工具的好处就是如果文件发生了变化,则会给标注出来(需要重启计算机)。
    

6、Git的简单操作

    右键选择【Git Bash Here】打开Git的命令行窗口,这个命令行里面可以输入linux下的命令,他会自动的给你转换成对应的Windows下的命令执行。因为他和linux下的命令窗口比较像,所以我们可以通过修改PS1变量达到修改命令提示符样式。具体需要修改的文件就是:C:\Program Files\Git\etc\profile.d\git-prompt.sh

6.1、仓库初始化:git init

    我们在桌面上创建一个tmp文件夹,并进入到tmp文件夹中。我们执行git init命令。命令提示符提示
[denggh@19:29:21 tmp]$ git init
Initialized empty Git repository in C:/Users/denggh/Desktop/tmp/.git/
// 在目录C:/Users/denggh/Desktop/tmp/.git/下初始化了一个空的git仓库

// 这里的命令提示符相比较上面的那条命令多出了 (master) 这个东西,这里表示当前是master的主分支
[denggh@19:29:24 tmp] (master)$ ll -a
total 8
drwxr-xr-x 1 denggh 197121 0  5月  3 19:29 ./
drwxr-xr-x 1 denggh 197121 0  5月  3 19:29 ../
drwxr-xr-x 1 denggh 197121 0  5月  3 19:29 .git/

    所以到这里我们知道,如果我们想初始化创建一个仓库,则可以通过命令git init来完成,git init命令会创建一个.git的文件夹,文件夹里面存放着仓库的相关信息。默认情况下这个文件夹是次隐藏的。在Linux下以点开头命名的文件夹都是隐藏的。

6.2、仓库中文件状态:git status   

    我们这个时候创建一个文件hi.txt,并且随便写点内容。执行 git status命令之后提示如下:
[denggh@19:38:14 tmp] (master)$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hi.txt

nothing added to commit but untracked files present (use "git add" to track)
            
// 上面的意思是说:在master分支上,还没有进行过文件提交。但是我们发现了一个没有被git追踪的文件 hi.txt 。你可以使用命令 git add 把这个文件添加到待提交列表。

6.3、文件添加到暂存区:git add

    我们执行git add 命令,在执行git status查看下状态
[denggh@19:49:38 tmp] (master)$ git add .
warning: LF will be replaced by CRLF in hi.txt.
The file will have its original line endings in your working directory

// git add . 后面的点表示所有的文件。就是把所有的文件都存到暂存区
// 这里他给出了警告,原因是在linux操作系统中,文件的换行符是LF,在windows的操作系统中文件的换行符是CRLF。
// 他说,我们把文件的换行符从CRLF替换成了LF,但是你的工作目录中的文件的换行符没有改变。

[denggh@19:49:41 tmp] (master)$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   hi.txt

// 在分支 master 上,还没有进行过commit提交,变更的等待提交的文件列表中有个新建的文件 hi.txt 可以通过使用
// git rm --cached 命令将文件的状态从暂存区转移到工作区。

6.4、文件提交到仓库:git commit

    我们执行 git commit命令,在执行git status查看相关的状态说明,如果提示你Please tell me who you are.相关内容,请参考后续章节进行用户名邮箱设置。
[denggh@19:49:49 tmp] (master)$ git commit -m '第一次提交文件,添加hi.txt'
[master (root-commit) 84289bf] 第一次提交文件,添加hi.txt
 1 file changed, 1 insertion(+)
 create mode 100644 hi.txt

// git commit 表示将文件的状态从暂存区提交到git仓库中。-m 表示提交的变更信息,就是改了什么
// 第2行:master 表示分支,84289bf 是一个commit id,根据SHA1生成的。他只取了前几位。后面的就是提交信息
// 第3行:1 file changed, 1 insertion(+) 就是说有一个文件发生变化,增加了一行
// 第4行:就是说在仓库中创建了一个文件 hi.txt


[denggh@19:59:13 tmp] (master)$ git status
On branch master
nothing to commit, working tree clean

// 提交完之后再执行git status 命令,他先是:在分支 master 上,没有什么好提交的,工作区很干净。

6.5、提交记录查看:git log

    我们如果想查看提交的历史记录,则可以使用git log命令
[denggh@20:02:17 tmp] (master)$ git log
commit 84289bfc853ac948d49d55c5022245c866098b76
Author: denggh <1073747506@qq.com>
Date:   Sun May 3 19:59:13 2020 +0800

    第一次提交文件,添加hi.txt

// 第2行:提交的commit id,这是根据SHA1生成的,注意看前7位,他和上节中的那个id一样。因为SHA1的前7位重复的概率比较小,所以一定情况下,我们可以省略只取7位表示具体的版本。
// 第3行:这次提交的作者,以及联系作者的邮箱地址
// 第4行:什么时候提交的

6.6、用户名以及邮箱的设置:git config

    如果你没有设置用户名邮箱,则他会提示如下内容
[denggh@20:11:03 tmp] (master)$ git commit -m '第一次提交文件,添加hi.txt'

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'denggh@PC-DENGGONGHAI.(none)')

// 这里的意思就是说,你要告诉我你是谁,目的是让别人能够知道文件是谁提交的,如何联系到这个提交的人。
// 可以通过 git config 命令设置用户名及邮箱。

    在git中,我们可以使用git config 命令设置git的配置文件,git配置级别有3种:

  • 仓库级别:local 优先级最高,针对某个仓库(存储到仓库的.git目录下的config文件中)
  • 用户级别:global 优先级次之,针对登录电脑的某个用户(存储到用户目录下的 .gitconfig文件中)
  • 系统级别:system 优先级最低,针对电脑上的所有用户(配置是写到git安装目录下的 etc/gitconfig文件中的)
[denggh@20:21:16 Desktop]$ git config --system user.email "denggh@example.com"
[denggh@20:21:19 Desktop]$ git config --system user.name "denggh"
[denggh@20:21:53 Desktop]$ cat "C:/Program Files/Git/etc/gitconfig"
[diff "astextplain"]
        textconv = astextplain
[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        process = git-lfs filter-process
        required = true
[http]
        sslBackend = openssl
        sslCAInfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
[core]
        autocrlf = true
        fscache = true
        symlinks = false
        editor = \"C:\\\\Program Files\\\\Notepad++\\\\notepad++.exe\" -multiInst -notabbar -nosession -noPlugin
[credential]
        helper = manager
[user]
        email = denggh@example.com
        name = denggh
// 当我们执行 git config 设置system级别的属性配置时,这个配置是写到git安装目录下的 etc/gitconfig文件中的

[denggh@20:22:21 Desktop]$ git config --global user.name "denggh"
[denggh@20:22:36 Desktop]$ git config --global user.email "denggh@example.com"
[denggh@20:23:19 Desktop]$ cat "C:\Users\denggh\.gitconfig"
[user]
        name = denggh
        email = denggh@example.com

// 执行 git config 设置 global 设置用户级别的,存储到用户目录下的 .gitconfig文件中

[denggh@20:23:43 tmp] (master)$ git config --local user.email "denggh@example.com"
[denggh@20:23:45 tmp] (master)$ git config --local user.name "denggh"
[denggh@20:23:55 tmp] (master)$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[user]
        email = denggh@example.com
        name = denggh
// 执行 git config 设置 local 设置仓库级别的配置,存储到仓库的.git目录下的config文件中

    对于配置的变更,需要通过命令行去操作。不建议通过手动修改配置文件的方式,虽然在一定程度上修改配置文件也可以达到相同的效果。

7、总结

    
    我们通过使用 git init之后,就创建了一个git仓库,该目录下除了 .git 文件之外的就是工作区,也就是我们
 

 

posted @ 2020-05-04 00:54  源来是这样  阅读(332)  评论(0)    收藏  举报