Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践
版本控制系统介绍
版本控制系统是可以追踪文件、代码修改历史的工具。它能让用户参考它们以前的作品以及分享代码修改的地方给合作者。
Git介绍
Git是一个分布式版本控制系统。这意味着每一位开发者的电脑存储着整个文件的所有历史版本。我们称整个文件的全部历史为“repository”。“repository”存储在本地意味着我们可以本地使用Git,甚至可以不用联网。
Local Repositories
例子:
假设我们想存储不同种类的菜单在我们的电脑上,同时当我们改变它们时,想要跟踪它们的历史。所以我们创建了四个菜单,两个是tofu,两个是seitan。
$ cd /users/sandra
$ mkdir recipes
$ cd recipes
$ mkdir seitan
$ mkdir tofu
$ cd seitan
$ subl smoky_carrot_tahini_seitan_slaw.txt
$ subl boiled_seitan.txt
$ cd ../tofu
$ subl kung_pao_tofu.txt
$ subl basil_ginger_tofu.txt
要设置git仓库来存储食谱的历史记录,我们需要使用以下命令:
$ cd /users/sandra/recipes
$ git init
git init 做的就是告诉git版本控制系统我们想要追踪当前文件夹的历史。但是,现在为止,没有任何东西存储在repository中。这就像我们买了一个保险箱,但我们还没有放任何东西进去。
为了存储所有菜单在仓库中,我们首先需要添加文件。
git add ./tofu/kung_pao_tofu.txt
当我们执行add命令后,我们仍然没有存储菜单在repository(也就是保险箱)中。
相反的,我们是把kung_pao_tofu.txt添加到文件列表中进行追踪(之后会添加到保险箱)。这个想法是你也许没必要追踪/users/sandra/recipes这个文件夹下的所有文件,所以add命令会告诉git哪一个文件需要追踪。
我们可以用git status命令来查看效果:
$ git status
返回结果:
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: tofu/kung_pao_tofu.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
seitan/
tofu/basil_ginger_tofu.txt
“Changes to be committed”部分列出了当前正在跟踪的所有文件,以及其更改完准备提交(即准备放入保险箱)的所有文件。我们还看到一些未跟踪的文件,即seitan文件夹和tofu/ basil_ginger_tofu.txt文件。这些没有被跟踪,因为我们没有使用git add添加它们。
现在我们添加tofu/basil_ginger_tofu.txt,再次检查status:
$ git add ./tofu/basil_ginger_tofu.txt
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: tofu/basil_ginger_tofu.txt
new file: tofu/kung_pao_tofu.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
seitan/
我们能看到两个tofu菜单都被追踪,而没有seitan菜单被追踪。
我们可以使用commit命令来将tofu菜单放入repository中(即保险箱)。
$ git commit -m "add tofu recipes"
-m命令可以向这次提交添加注释。
在使用commit命令后,git status的“changes to be committed”将不会有文件存在。
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
seitan/
nothing added to commit but untracked files present (use "git add" to track)
提交过程不会影响电脑中的源文件。