Git简明教程二、开始进行版本管理


上一篇介绍了Git中的一些基本概念。本篇来实际看一看如何通过几个常用命令来快速上手Git,完成版本管理的日常操作(核心操作)。

0. 准备工作

安装Git后,请先在你的电脑上新建或选择一个目录作为测试用,本教程大部分操作都将在该目录下完成。

另外,我们的操作都是在命令行下完成的,如果你用的是Windows,可以通过右键菜单打开Git Bash这个Git命令行环境:在资源管理器中进入该目录,点击右键,在右键菜单中点击“Git Bash”即可打开Git Bash并自动定位到当前目录下:

1. 简单配置

进入你的测试目录,在Windows中用前面的方法打开Git Bash后就已经在测试目录下了。接下来,由于这是安装后第一次运行Git,我们需要做一点简单配置:

$ git config --global user.name "your name"
$ git config --global user.email "your email"

为了在多人合作时能区分每个人的身份,所以我们需要告诉Git我们是谁。Git有很多设置选项,只有名字和email是一开始就必须设置的,其他大部分都是用来提高工作效率的,我们暂时不去关心。

这里简单解释一下这个命令,Git的所有命令都遵循相同的格式:

  • $是命令提示符,本篇中会在介绍每个命令时以该字符开头,这样就能很方便地知道这是一条命令了
  • git是主命令,用来告诉Shell我想运行git程序
  • config是子命令。Git中的操作都是通过子命令来完成的,git命令本身基本不做什么事情,它根据指定的子命令调用相应的子程序来干活。请记住Git的这种工作模式,后面我在称呼Git命令时会忽略git这个主命令,直接用xx命令来称呼子命令。例如config命令add命令commit命令等等
  • 再后面的就是传递给子命令的具体参数了。后面在介绍具体命令的时候会同时介绍一些常用参数。

2. 创建版本库

下面就来在我们的测试目录中创建一个版本库玩玩。创建版本库非常简单:

$ git init

不需要任何参数,只要一个init命令就可以在当前目录下创建一个版本库。成功后,就会在当前目录下生成一个隐藏的.git目录,这个就是Git的版本库,而当前目录就成为了工作区。

现在版本库还是全新的,里面只有少量的初始配置数据,还没有任何的版本提交记录等信息。工作区暂时也是新的,里面还没有需要被Git管理的文件。

3. 修改与提交

现在我们在当前目录(工作区)中随意创建一个文件例如hello.c。好了,这个文件目前已经处于Git的“监管”中了。你在该文件中所做的任何改动都会被Git看在眼里。

现在就来试一试,用你喜欢的任何编辑器打开该文件,在里面输入一段内容并保存,然后在Git Bash中输入以下命令:

$ git status

显示结果如下:

status命令用来显示工作区当前的状态,例如有哪些文件有改动,哪些文件是新增的等等。从结果可以看出来,工作区中新增了一个hello.c文件,并且该文件正处于untracked状态。

untracked的意思是这个文件正被Git“监视”着,但还没有记录在案。这时候如果你删除了新创建的文件,或者在编辑器中把最新的修改撤销掉了,Git的态度是“事不关己高高挂起”的。

要想让文件真正被Git管理起来,我们需要把这个文件提交到版本库中。也就是让Git把关于这个文件的一些信息记录下来,比如什么时候修改的,由谁修改的、修改了哪些内容,等等。向版本库中提交一个文件需要2个步骤,以我们刚才创建的hello.c文件为例:

$ git add hello.c
$ git commit -m "create hello.c"

第一步add命令用来将文件标记为可以提交的,从而消除了文件的untracked状态。你可以在执行commit命令之前用add添加任意数量的文件,这样下次commit时就会将这些文件一起提交到版本库。实际上,add命令会把文件添加到一个叫做暂存区(stage)的地方,暂存区是版本库中的一个临时场所,如下图所示(图片来自廖雪峰老师的网站):

文件从添加到暂存区开始就会受到Git的保护,假如工作区中该文件丢失了,我们可以从暂存区中恢复它。

暂存区的另一个主要功能或者说优点是它可以用来标记出哪些文件是需要提交的而哪些是暂时不想提交的。因为有时候我们的工作区中有很多文件都被修改过,但某一次提交可能只想提交其中的一部分,其他的,例如还没有最终完成的功能,或者一个只修复了一半的bug等,这些文件我们暂时不想提交。这是很常见的情况,利用暂存区可以很方便地满足这种需求。

暂存区只是临时的,我们的最终目标是将修改后的文件提交到版本库中。commit命令用来将暂存区中的文件提交到版本库,并且在版本库中形成一个新的版本记录。commit需要一个-m参数,用来对本次提交做出说明。例如提交了哪些文件、修改了什么地方、或者修复了哪个bug等。默认情况下说明信息是必需的,为每次提交写一点描述也是一个很好的习惯,我们应当养成并坚持这一习惯。

4. 比较修改前后的差异

很多时候,我们在决定将一个文件提交到版本库之前希望能够确认一下修改的内容。这时候就可以使用diff命令:

$ git diff hello.c

Git提供的diff命令和Linux下常用的diff差不多,输出格式也基本一样。如下图所示:

diff命令会将工作区中该文件的内容与暂存区中内容或版本库中最后一次提交的内容做对比,并显示两者的差异。如果这个文件之前被添加到了暂存区但还没有提交,那么比较的将是工作区和暂存区之间的差异;否则就会比较工作区和版本库中最后一次提交的内容之间的差异;如果暂存区和版本库中都没有该文件的记录(例如文件是新建的)那么将不会执行比较(什么都不显示)。

从图中可以看出来,相比上次提交,hello.c文件新增加了一行:# I will code it later^M(这个^M了解Windows和Linux差异的应该都清楚吧)。

5. 另一种创建版本库的方法:克隆

init用来创建一个全新的版本库。但有时候我们并不是想创建一个新的版本库,而是希望将别的地方已有的版本库复制一份过来。例如公司的代码服务器上的公共版本库,你希望将其复制一份到自己的电脑上。或者你希望把你在GitHub上的某个版本库复制一份到本地,等等。

这时候,我们就可以使用克隆命令,命令中的url是要克隆的版本库的访问地址:

$ git clone url

关于这个后面介绍GitHub时再细说。

6. 总结

本节介绍了以下几个常用命令:

  • status命令用来查看工作区的当前状态
  • init命令用来在当前目录下初始化一个版本库
  • diff命令用来比较文件在工作区和版本库(或暂存区)之间的差异
  • add命令用来将工作区中修改过的文件添加到暂存区
  • commit命令将暂存区中的文件提交到版本库
  • clone命令是另一种创建版本库的方法,它将另一个版本库复制一份到当前目录下(clone命令暂时只需了解即可)

Git中最常见的一组操作是修改文件->比较差异->放到暂存区->提交到版本库,掌握了这几个操作对应的命令以后就算入门了,可以初步利用Git管理你的代码了。

下一节会更介绍另外几个实用的命令,从而更好地完成修改->提交操作。

如果觉得本文对你有帮助请顺手点个赞吧



posted @ 2015-11-19 10:48  Antineutrino  阅读(2506)  评论(6编辑  收藏  举报