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

Git 简介

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

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

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

安装

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

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

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

配置

当我们安装完毕 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

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

此外,我们还可以通过以下命令来更改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 仓库包括了以下的内容:

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

和远程仓库建立连接(以 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,都需要登录。

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

#以下的记住都是只针对该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 登录,来进行克隆。

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

ssh-keygen

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

使用命令:

cat id_rsa.pub

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

Deploy keys

SSH and GPG keys

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

git 常用命令与定义

定义

  1. git 的工作流:
    工作区(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,永无止境,未完待续……