最近在CSDN上学习了一个关于git的详细视频,感觉受益匪浅。系统性的了解了git的使用方法和基本原理。现记录之。感觉学习还是得系统性地学,才不至于云里雾里呀。

Git简介

git最初是用于Linux内核开发的版本控制工具。与CVSSubversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。

git现在被广泛用于程序开发中,比如这篇Blog其实就是我在本地写好再push到服务器端上去的。随着git的发展,还衍生了一系列诸如Github、Gitee等代码托管平台,它们的核心也是git技术。

git的数据流与存储级别示意图,如下:

gitbash

安装

对于Windows系统:进入git官网,进入git下载(Download)界面,选择下载的版本,将exe文件安装在电脑上即可。

安装成功后,在桌面右键会看到“Git bash here”和“Git GUI here”两个插件。其中,GUI就是一个可视化的git操作界面(可以创建库之类的);bash就是一个shell(感觉比cmd好用且好看)。

gitbash

对于Linux系统:在终端输入apt install git即可下载安装git。安装完毕后,在终端输入git,若出现以下提示即可说明安装成功。

gitbash

配置

当我们安装完毕git后,就需要对它进行一定的配置。这个配置包括:

  • 设置git的用户名、邮箱
  • 初始化git仓库等
  • 配置git的公、私钥
  • 和远程仓库建立连接

设置git的用户名、邮箱

这个步骤是配置git的第一步,原因在于它是我们进行身份的一个标识物。由于git主要是用来给团队做版本控制,若身份不清会导致版本混乱等bug,所以设置清楚的git用户名至关重要。

设置git用户名和邮箱的操作如下:

git config --global user.name "Bolun"
git config --global user.email "Bolun@example.com"

注意:--global是可选项,若键入则表明该用户对全局生效,即所有项目将均采用“Bolun”为名来进行git;若不键入则只对该项目生效,其他项目可以另外配置别的用户名/邮箱来进行git操作。

修改完毕后,我们可以输入以下命令,来检查git配置情况:

git config --list

回车后,会出现以下显示:

gituser

此外,我们还可以通过以下命令来更改user.nameuser.email

git config --replace-all user.name "NewName"
git config --replace-all user.email "NewEmail@example.com"

初始化git仓库

进行用户名和邮箱配置后,我们可以在一个合适的文件夹使用如下命令,初始化git仓库:

git init

我们可以看到以下输出:

其中,master代表我们正在master分支。

我们可以进入新建的git仓库,看看它包括什么文件(夹):

ls -al
cd .git
ls

我们可以看到初始化后的git仓库包括了以下的内容:

gitls

这些目录分别具有以下的功能:

gitdir

和远程仓库建立连接(以Github为例)

我们前往Github建立一个新仓库(如果你没有Github账号,那请申请一个;如果进入Github非常卡,建议采用中国的代码托管平台码云-Gitee)。

如下图所示,设置好Github新仓库的相关信息后,点击Create repository即可建立。

我们可以看到新建立仓库的右上角有一个clone/download,点击后如图:

可以由有三种方式来进行clone操作(clone意味着把仓库复制到一个新路径):

  • 通过SSH方式(不需要每次都输入用户名和密码,但需要配置公私钥)
  • 通过HTTPS方式(不需要配置公私钥,但每次都要输入用户名和密码)
  • 通过客户端的方式(通过Github客户端进行代码上传、下载)
  • 其他方式:如SVN、SVN+SSH等

其中,通过客户端的方式为Github等代码托管平台特有,且只在Windows和Mac系统上有客户端(UI界面)。故虽然第三种最方便最人性化,但也不推荐使用。

采用HTTPS方式进行克隆:

git clone https://github.com/MINTPlanetarian/git_test.git

我们可以看到:若仓库公有(开源),则可以直接进行clone操作,但若仓库私有,则出现了需要登录Github的情况,且每次用HTTPS方式来clone/pull,都需要登录。

githubhttps

可以通过设置权限缓存来减少输入账户、密码的次数,设置权限缓存的命令如下:

#以下的记住都是只针对该clone域名,而不是Github账户
git config --global credential.helper cache    #15分钟内记住
git config --global credential.helper store #永久记住

采用SSH方式进行克隆:

git clone git@github.com:MINTPlanetarian/git_test.git

我们可以看到:它报错说“key(密钥)不在远端”。说明我们没有配置相应的公私钥来供给SSH登录,来进行克隆。

githubhttps

我们需要在本地创建一对公私钥,使用命令:

ssh-keygen

当出现下图这种花里胡哨的图案时,就说明我们的密钥创建成功了:

githubhttps

使用命令:

cat id_rsa.pub

然后把打印出的信息复制,粘贴到该项目设置的Deploy keys里或者全局配置SSH and GPG keys里:

Deploy keys

githubhttps

SSH and GPG keys

githubhttps

这时候再使用SSH方式克隆的代码,我们发现clone成功了!

git常用命令与定义

定义

  1. git的工作流:

    gitworkcurrent

    工作区(Working Directory):电脑里能看到的目录,我们平常所做的修改和增删都是在这里进行的;

    暂存区(Index):git add命令将工作区的文件提交到暂存区,它的作用是对修改的文件进行暂存(可以理解为将所有改动的文件都放在暂存区里,然后一次性地将暂存区全部提交到远程仓库);

    HEAD:git commit命令将暂存区的文件提交到HEAD库,它指向的是最后一次的修改结果,为push到远程仓库做最后准备。

  2. master:HEAD库自动生成的一个(主)分支,可以通过分支合并的方法来起到不影响正常使用的情况下更换库内容的目的,更多信息请参考git分支 - 分支的新建与合并

  3. 待更新……

常见命令

git clone user@server:repositories    #从远程仓库克隆文件到本地

git pull    #代码拉取(防止代码冲突)

git status    #查看版本改动情况

git add .    #添加改动到缓存区(.代表当前文件夹所有文件,也可以只改动指定文件)

git commit index.txt -m 'Descriptions'    #将改动的文件添加到本地的HEAD仓库(并用`-m`加注释)

git push    #将改动的文件添加到远程仓库

git log        #查看git记录(可以看到版本号)

git diff --cached        #查看工作区的具体改动(若输入`--cached`则可以查看缓存区改动)

学习git的推荐网址

  1. Git官网:内有原汁原味的git官方文档,可以帮助初学者从入门到进阶到秃头……
  2. Git学习闯关:用闯关游戏的方式一边学git一边玩,万物皆可闯关呗。
  3. Git的奇技淫巧:有关Git的一切你都能在这里找到。
  4. 廖雪峰的git教程:号称史上最简学易懂的git教程。

致谢

感谢华科CS的葛大佬给我在学习git上的帮助和推荐的有趣的网站~

学习git,永无止境,未完待续……