这辈子没法做太多的事情, 所以每一件都要做到精彩绝伦!
--史蒂夫.乔布斯

花10分钟开始使用Git

假如你刚加入一个项目组,该项目使用Git作为源代码管理,但你之前没有用过Git,你该怎么办?

刚开始你完全没必要去系统学习Git,只要了解几条命令就足以胜任:首先用git clone下载代码,每当你修改一个文件或者新添加了一个文件你用git add暂存修改,修改好之后用git commit提交代码变更记录,最后用git push提交到服务器上。如果你随时想查看提交记录用git log。我们来看看具体该怎么做:

注意,如果没有其他特殊说明,本教程的所有操作都是在系统shell中运行,不包含任何图形化工具的操作。

  1. 安装Git Git官方网站上有相应平台版本下载(Mac上一般默认有Git,如果你用Mac先敲下git命令,确认下有没有)。在不想安装的情况下,你也可以去这里在线练习,该网页提供模拟的Git命令供你一步步练习使用。
  2. 全局设置
    git config --global user.name "John Doe" // John Doe换成你自己名字`
    git config --global user.email johndoe@example.com // johndoe@example.com 换成你的邮件地址
用户名和邮件是用来追踪代码提交者的,每次你提交代码,历史记录里面会有这个信息。
  1. 获取远程代码仓库地址如果你还没有Git服务器的地址,请找你同事求助,问一问“我们Git服务器地址是什么?”,一般情况下你会得到这样一个地址:

    username@host:/path/to/repository

    其中username是你的用户名,host当然就是git的服务器地址。可能是IP或者域名
    一个真实的例子可能像这样:
    jeffrey@192.168.1.100:project.git~
    或者这样的
    user@server:/projects/project.git

    也可能是这样的
    https://server/namespace/project.git
    如果你同事只告诉你一个服务器和路径,你也不知道用户名密码,你还得再找其他人帮你增加新用户。为了方便描述,之后用https://server/namespace/project.git_来指代这个你得到的地址。

  2. 下载项目源代码[^ 1]
    git clone https://server/namespace/project.git
    下载之前最好先切换到你想放源代码的文件夹,通过执行上面这个命令下载项目代码到该文件夹中。
    [^ 1]:“下载”确切的说是创建一个远程代码仓库的一个本地克隆,如果你有疑问,暂时就理解成“下载源代码”即可,本系列后面文章会有详细解释。
  3. 修改了一个代码文件之后使用git add命令
    git add the-modified-file.cc
  4. 添加新代码文件到项目中同样也使用git add命令
    git add the-added-file.cc
  5. 提交本地仓库更改
    git commit -m "fix a xxx bug
  6. 提交到远程服务器
    git push origin master
    该提交命令的格式是~git push [remote-name] [branch-name]~. origin指的是远程服务器分支,master为本地分支。二者的值都是在你一开始用clone命令的时候被git自动设置好了的了。所以只要简单的使用origin master即可。

需要注意的几点有:

  1. 多次更改需多次git add。上述#5中,如果你在你执行了add之后有又有新的更改想提交,请再次执行add命令,如此反复。否则此时通过commit命令被提交的只是上次add之前的更改,add之后的新改动不会被提交。下一篇文章会详细描述为什么需要这么做,和这个机制有什么优点;
  2. git push才会提交代码到服务器,其他操作都是在本地进行。上述#7中_git commit _命令只是把代码提交到本地仓库,此时其他人还看不到你的更改。只有通过#8的push操作后代码才会真正被提交到远程服务,此时其他人才会看到你的更改;现在你应该还不会如何撤销更改,所以请谨慎使用push操作;
  3. 修改和提交代码到服务器前最好先同步最新代码。因为你现在还不熟悉其他操作,为了避免merge,最好能在别人没有改动的情况下修改代码,或者运行下git fetch origin先同步别人的更改后再修改文件。
  4. 放心练习,只要不做git push操作,都是安全的。这里之所以没有推荐在本地新建一个代码仓库作为练习是因为你完全可以用你的真实项目随便练习操作,只要不git push就行。真实的项目你可以看到别人是怎么用Git的,也不用人为花时间造练习数据。玩坏了直接在文件系统删掉整个目录,或者在其他目录重新git clone一份项目代码即可。即使公司暂时没有可以使用的源代码仓库你还可以去[github]上随便找一个感兴趣的小项目clone下了练习即可。如果你还是要坚持新建本地代码仓库练习随笔找个目录执行git init即可,执行git init之后该目录下除了没有项目文件以外和其他git仓库没有区别。

那如何知道自己和别人的提交记录呢?使用git log即可。输出结果会像这样:

$ git log
commit ca82a6dff817ec66f44342007202690a93763949`
Author: Scott Chacon <schacon@gee-mail.com>`
 Date:   Mon Mar 17 21:52:11 2008 -0700`
     changed the version number`
 commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7`
 Author: Scott Chacon <schacon@gee-mail.com>`
 Date:   Sat Mar 15 16:40:33 2008 -0700`
 removed unnecessary test`
 
commit a11bef06a3f659402fe7563abf99ad00de2209e6`
 Author: Scott Chacon <schacon@gee-mail.com>`
 Date:   Sat Mar 15 10:31:28 2008 -0700`
     first commit

或者你想看看每次提交具体的改动内容,请加上-p选项
git log -p
下面显示的结果包涵了具体改动内容历史记录

$ git log -p -2 // -2表示只想看最近两次提交历史
 commit ca82a6dff817ec66f44342007202690a93763949
 Author: Scott Chacon <schacon@gee-mail.com>
 Date:   Mon Mar 17 21:52:11 2008 -0700
 
     changed the version number
 
 diff --git a/Rakefile b/Rakefile
 index a874b73..8f94139 100644
 --- a/Rakefile
 +++ b/Rakefile
 @@ -5,7 +5,7 @@ require 'rake/gempackagetask'
  spec = Gem::Specification.new do |s|
      s.platform  =   Gem::Platform::RUBY
      s.name      =   "simplegit"
 -    s.version   =   "0.1.0"
 +    s.version   =   "0.1.1"
      s.author    =   "Scott Chacon"
      s.email     =   "schacon@gee-mail.com"
      s.summary   =   "A simple gem for using Git in Ruby code."
 
 commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
 Author: Scott Chacon <schacon@gee-mail.com>
 Date:   Sat Mar 15 16:40:33 2008 -0700
 
     removed unnecessary test
 
 diff --git a/lib/simplegit.rb b/lib/simplegit.rb
 index a0a60ae..47c6340 100644
 --- a/lib/simplegit.rb
 +++ b/lib/simplegit.rb
 @@ -18,8 +18,3 @@ class SimpleGit
      end
 
  end
 -
 -if $0 == __FILE__
 -  git = SimpleGit.new
 -  puts git.show
 -end
 \ No newline at end of file

参考文档

  1. Pro Git book
  2. git - the simple guide

返回本系列文章目录