书接上回,上一节书我们回顾了GIT的前世今生,将GIT 与Clearcase做了一个比较。这篇我们一块来到GIT的地盘。初来乍到,我们从一些常用的,基本的命令开始。如果您是GIT的高手,请无视这篇文章,无须多费时间在这上面.
这篇blog会讲到的部分有以下4个:
1. 混沌初开(Git init & clone)
2. 与时俱进(Git Pull & Fetch)
3. 添砖加瓦 (Git add & commit & push)
4. 明察秋毫 (Git log & show)
1. 混沌初开 (Git init & clone & remote)
如果我们想将现在的项目放到GIT里面去,那么我们可以将命令行转到当前目录下,执行 “git init” 这个命令。这将会创建一个.git的文件夹。这个文件里面包含了GIT所需要的所有信息,包括 项目的设置,index,index lock,branch的信息,change的信息,ref的信息等等。就是这么简单的一个命令,就能够把GIT的仓库创建起来,酷吧?
而如果项目已经被其他伟大的同事加上去了,那我们要做的就是从给定的地址上面,把代码库克隆一份到本地,这样才能对代码进行修改。可以用下面的命令完成:
"git clone Your_Account@TeamPC/Your_Project.git"
然后你就等啊等,直到代码都下载到本地就OK。注意哦,1) 即使是克隆下来的代码,里面也有一个.git的文件夹,里面同样了包含了整个代码库的历史信息以及index等等,跟init出来的文件结构一样,只不过里面已经有其他内容了。 2)代码库有两种,上面的命令克隆下来的代码库是 personal (个人的),里面包含了代码以及相关的repository信息,而如果clone的命令带了这个参数 “--bare”,那么克隆下来的就只有repository的信息,而不能看到任何源文件。具体区别跟用法 会在后面的文章讲到
2.与时俱进(Git Pull)
别人都已经开发到2.0了,我们总不能老是拿着1.0的代码在看啊!这个时间我们就需要与时俱进,去拿到别人已经做好的更新. GIT就跟孔乙己估计有亲戚关系,茴香豆的“茴”字有4种写法,而GIT拿代码也有2种拿法:
“git fetch”
“git pull”
Fetch只是将别人的改动拿到本地的repository里面,但是不会跟working folder做merge。也就是说只拿不用,在我们的源文件里面还是看不懂别人的改动,只在history tree里面看到; 而Pull是将别人的改动拿到本地的repository里面之后,还将这些个改动添加到我们的源代码里面去。 可以这样说 Pull = Fetch + Checkout
3.添砖加瓦(Git add & commit & push)
人不能太自私,老是拿别人的东西,自己又藏着掖着。所以我们的代码改动也要放到公共代码库里面去。怎么弄呢?如果是Clearcase,我们需要 checkout + checkin + delivery. 而GIT里面也是需要一个类似的过程, add + commit + push. GIT里面有3块不同的地方,一个是working tree, 也就是我们平时看到源代码的地方;第二个是index,从物理上讲,这只是一个文件。再说一个,GIT的文件无外乎两种状态 (被跟踪跟未被跟踪),index就是记录这些个被跟踪的文件信息;第三个地方时local repository,可以看做.git里面的东东。当添加一个文件或者修改一个文件之后,我们需要用 git add 的命令告诉GIT这个文件需要被跟踪,而如果仅仅是被跟踪的话,别人是拿不到这个文件的改动的,因为GIT只认commit的信息。所以这个需要就需要commit啦~ commit会记住我们刚刚修改了哪些文件,由谁修改的等等信息。以上的add / commit的动作都只是在本地,别人根本不知道你在干虾米。这个时候,我们需要用git push的命令告诉 team PC的GIT 我们改了什么!
都说程序员都是特别懒的,如果每修改一个文件就需要add一下还真有够烦的,也容易漏,GIT也早就想好了。怎么弄呢? "git add" +"git commit" = "git commit -a" 这个命令将会找出前面所修改的所有文件,然后一次性加到index里面去,再commit! 爽了吧 这下!
4. 明察秋毫 (Git log & show)
若要人不知,除非己莫为。只要我们修改了文件,并且上传到服务器上,那么别人就可以看到是谁改的,改了什么。怎么看呢? "git show" + "git log". GIT的历史记录是由一些列相关联的”commit”所组成的。每一次“commit”都会有一个唯一的名称。如下黑体字所示:
[lazypig@lazypig project]$ git log
commit 1a6668402aadd3cd41b3fe8c84a8658da
Author: lazypig <lazypig@gmail.com>
Date: Wed Sep 24 13:16:46 2011 +0800
after pull from rocrocket