jasmine214--love

          只有當(dāng)你的內(nèi)心總是充滿快樂(lè)、美好的愿望和寧?kù)o時(shí),你才能擁有強(qiáng)壯的體魄和明朗、快樂(lè)或者寧?kù)o的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          Git 歷險(xiǎn)(一)

          Posted on 2011-05-10 14:30 幻海藍(lán)夢(mèng) 閱讀(697) 評(píng)論(0)  編輯  收藏 所屬分類: 版本管理

          【編者按】作為分布式版本控制系統(tǒng)的重要代表——Git已經(jīng)為越來(lái)越多的人所認(rèn)識(shí),它相對(duì)于我們熟悉的CVS、SVN甚至同時(shí)分布式控制系統(tǒng)的 Mercurial,有哪些優(yōu)勢(shì)和不足呢。這次InfoQ中文站有幸邀請(qǐng)到《Git Community Book》的譯者劉輝,在InfoQ開(kāi)辟《Git歷險(xiǎn)記》專欄,分享他使用Git的經(jīng)驗(yàn),以及他對(duì)Git的看法。


          Git是Linus.Torvald為了管理Linux內(nèi)核發(fā)起并開(kāi)發(fā)的一個(gè)開(kāi)源分布式版本控件系統(tǒng)(DVCS)。從2002年起,Linux 內(nèi)核一直使用BitKeeper來(lái)進(jìn)行版本管理,但是在2005年BitKeeper和Linux 內(nèi)核開(kāi)源社區(qū)的合作關(guān)系結(jié)束,BitKeeper再也不能免費(fèi)使用了,這迫使Linus決定開(kāi)發(fā)一個(gè)開(kāi)源界自已的版本控制系統(tǒng)。

          傳統(tǒng)的SVN、CVS 等版本控制系統(tǒng),只有一個(gè)倉(cāng)庫(kù)(repository),用戶必須要連上這個(gè)倉(cāng)庫(kù)才能開(kāi)始提交;而Git之類的分布式版本控制系統(tǒng)(當(dāng)然也還包括 BitKeeper、Mercurial等 等),它的每個(gè)工作目錄都包含一個(gè)完整的倉(cāng)庫(kù),它們可以支持離線工作,先把工作提交到本地倉(cāng)庫(kù)后再提交上遠(yuǎn)程的服務(wù)器上的倉(cāng)庫(kù)里。分布式的處理也讓開(kāi)發(fā)更 為便捷,開(kāi)發(fā)人員可以很方便的在本地創(chuàng)建分支來(lái)進(jìn)行日常開(kāi)發(fā),每個(gè)人的本地倉(cāng)庫(kù)都是平等且獨(dú)立,不會(huì)因?yàn)槟愕谋镜靥峤欢苯佑绊憚e人。

          老實(shí)說(shuō),Git的速度是我用的版本控制系統(tǒng)中最快的(SVN Mercurial Git)。我這里說(shuō)的速度,包括本地提交(commit)、本地簽出(checkout)、提交到遠(yuǎn)程倉(cāng)庫(kù)(git push)和從遠(yuǎn)程倉(cāng)庫(kù)獲取(git fetch ,git pull);它的本地操作速度和本地文件系統(tǒng)在一個(gè)級(jí)別,遠(yuǎn)程倉(cāng)庫(kù)的操作速度和SFTP文件傳輸在一個(gè)級(jí)別。這當(dāng)然和Git的內(nèi)部實(shí)現(xiàn)機(jī)制有關(guān),這里就不 多展開(kāi)了,有興趣的朋友可以看一下這里:Git is the next Unix

          我們?cè)趯W(xué)一門(mén)新的語(yǔ)言時(shí),往往是從一個(gè)“hello world” 程序開(kāi)始的,那么Git歷程也就從一個(gè)“hello Git”開(kāi)始吧。

          在這里假設(shè)各位同學(xué)的電腦都裝好了Git,如果沒(méi)有裝好,可以先看一下這里(安裝Git)。當(dāng)然,后面的章節(jié)我會(huì)專門(mén)講安裝可能會(huì)碰到的問(wèn)題。

          我們首先打開(kāi)Git的命令行:windows下是點(diǎn)擊“Git Bash 快捷方式”;Linux或是Unix like平臺(tái)的話就直接打開(kāi)命令行界面就可以了。

          備注:$符號(hào)后面的字符串代表的是命令行輸入;命令行輸入后的以#開(kāi)始的黑體字符串代表注釋;其它的部分則是命令行輸出。

          我們先用建一個(gè)倉(cāng)庫(kù)吧:

          $mkdir testGit #建立倉(cāng)庫(kù)目錄



          $cd testGit #進(jìn)入倉(cāng)庫(kù)目錄



          $git init #這會(huì)在當(dāng)前的目錄下建一個(gè)倉(cāng)庫(kù)



          Initialized empty Git repository in e:/doc/Git/test/testGit/.git/



          好的,前面的三行命令就建立了一個(gè)本地的Git倉(cāng)庫(kù)。這個(gè)倉(cāng)庫(kù)現(xiàn)在是一個(gè)空的倉(cāng)庫(kù)。

          我們?cè)诿钚邢聢?zhí)行:

          $ git status #查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)



          # On branch master (在master分支上)



          #



          # Initial commit



          #



          nothing to commit (create/copy files and use "git add" to track)



          (現(xiàn)在沒(méi)有任何臺(tái)被提交的文件,復(fù)制或創(chuàng)建新的文件,再用”git add” 命令添加到暫存區(qū)中)



          $ git log #查看當(dāng)前倉(cāng)庫(kù)的歷史日志



          fatal: bad default revision 'HEAD'



          (由于倉(cāng)庫(kù)里沒(méi)有任提交在里面,所以它會(huì)報(bào)這個(gè)錯(cuò)。BTW: 這種提示是不是有點(diǎn)不友好呀:) )



          現(xiàn)在就讓我們?cè)谶@個(gè)倉(cāng)庫(kù)里添加點(diǎn)內(nèi)容吧。

          $ echo “hello Git” > readme.txt #建立一個(gè)含有 hello Git 的文本文件



          $ git add readme.txt #將readme.txt添加到暫存區(qū)



          $ git status #查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)



          # On branch master



          #



          # Initial commit



          #



          # Changes to be committed:(暫存里下次將被提交的修改)



          # (use "git rm --cached <file>..." to unstage)



          #



          # new file: readme.txt



          #



          好的,文件即然被暫存到暫存區(qū)中,我們現(xiàn)在就可以把它提交到倉(cāng)庫(kù)里面去:)

          $ git commit -m "project init" #將剛才的修改提交到本地倉(cāng)庫(kù)中 



          [master (root-commit) 8223db3] project init



          1 files changed, 1 insertions(+), 0 deletions(-)



          create mode 100644 readme.txt



          $ git status



          # On branch master



          nothing to commit (working directory clean)



          (現(xiàn)在這個(gè)工作目錄里沒(méi)有什么要提交的東東,它是整潔的)



          現(xiàn)在你執(zhí)行一下git log 命令就會(huì)看到剛才的提交記錄

          $ git log 



          commit 8223db3b064a9826375041c8fea020cb2e3b17d1



          Author: liuhui998 <liuhui998@gmail.com>



          Date: Sat Jan 1 18:12:38 2011 +0800



          project init



          “8223db3b064a9826375041c8fea020cb2e3b17d1”這一串字符就是我們這次創(chuàng)建的提交的名字。看起來(lái)是不是很 熟,如果經(jīng)常用電驢的朋友就會(huì)發(fā)現(xiàn)它就是和電驢里內(nèi)容標(biāo)識(shí)符一樣,都是SHA1串。Git通過(guò)對(duì)提交內(nèi)容進(jìn)行 SHA1 Hash運(yùn)算,得到它們的SHA1串值,作為每個(gè)提交的唯一標(biāo)識(shí)。根據(jù)一般的密碼學(xué)原理來(lái)說(shuō),如果兩個(gè)提交的內(nèi)容不相同,那么它們的名字就不會(huì)相同;反 之,如果它們的名字相同,就意味著它們的內(nèi)容也相同。

          現(xiàn)在我想改一下倉(cāng)庫(kù)里文件的內(nèi)容,現(xiàn)提交到倉(cāng)庫(kù)中去

          $ echo "Git is Cool" >> readme.txt #在文件的最后添加一行 



          $ git status #查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)



          # On branch master



          # Changed but not updated: (修改了,但是還沒(méi)有暫存的內(nèi)容)



          # (use "git add <file>..." to update what will be committed)



          # (use "git checkout -- <file>..." to discard changes in working directory)



          #



          # modified: readme.txt



          #



          no changes added to commit (use "git add" and/or "git commit -a")



          (沒(méi)有修改可以被提交,使用 “git add” 命令添加文件到暫存區(qū),或是使用“git commit -a” 命令強(qiáng)制提交當(dāng)前目錄下的所有文件)




          OK,即然我們修改了倉(cāng)庫(kù)里被提交的文件,那么我想看一下我們

          到底改了哪些地方,再?zèng)Q定是否提交。

          $ git diff #查看倉(cāng)庫(kù)里未暫存內(nèi)容和倉(cāng)庫(kù)已提交內(nèi)容的差異 



          diff --git a/readme.txt b/readme.txt



          index 7b5bbd9..49ec0d6 100644



          --- a/readme.txt



          +++ b/readme.txt



          @@ -1 +1,2 @@



          hello Git



          +Git is Cool



          很好,正如我們所愿,我們只是在readme.txt的最后一行添加了一行“Git is Cool”。

          好的,我們現(xiàn)在再把 readme.txt放到暫存區(qū)里:

          $ git add readme.txt 

          我們現(xiàn)在看一下倉(cāng)庫(kù)的狀態(tài):

          $ git status 



          # On branch master



          # Changes to be committed:



          # (use "git reset HEAD <file>..." to unstage)



          #



          # modified: readme.txt



          #



          可以提交了:

          $ git commit -m "Git is Cool" 



          [master 45ff891] Git is Cool



          1 files changed, 1 insertions(+), 0 deletions(-)



          (一個(gè)文件被修改,一行插入,零行刪除)



          再看一下新的日志:

          $ git log 



          commit 45ff89198f08365bff32364034aed98126009e44



          Author: liuhui998 <liuhui998@gmail.com>



          Date: Sat Jan 1 18:17:07 2011 +0800



          Git is Cool



          commit 8223db3b064a9826375041c8fea020cb2e3b17d1



          Author: liuhui998 <liuhui998@gmail.com>



          Date: Sat Jan 1 18:12:38 2011 +0800







          project init



          “45ff89198f08365bff32364034aed98126009e44” 這個(gè)就是我們剛才提交修改時(shí)創(chuàng)建的提交。

          大家這么一路看過(guò)來(lái),是不是有點(diǎn)糊涂了。不過(guò)沒(méi)有關(guān)系,如果你的電腦裝了Git,那么你把上面的這些命令全部執(zhí)行一下遍就會(huì)對(duì)它有感性的認(rèn)識(shí)了。

          下面的的章節(jié),我會(huì)講一下如何在windows和Linux安裝配置Git,以及需要注意的問(wèn)題:)


          原文:http://www.infoq.com/cn/news/2011/01/git-adventures-1

          http://www.infoq.com/cn/git-adventures(Git )

          主站蜘蛛池模板: 嘉义县| 桃江县| 来凤县| 鸡西市| 神农架林区| 锡林郭勒盟| 望城县| 宣化县| 龙里县| 彩票| 永和县| 连云港市| 邻水| 阜康市| 昌图县| 姜堰市| 鹤庆县| 得荣县| 景泰县| 邯郸市| 定边县| 宣武区| 习水县| 景德镇市| 屏南县| 大城县| 雷波县| 东丰县| 舟曲县| 漳州市| 陕西省| 垦利县| 石河子市| 江达县| 乌兰察布市| 唐河县| 明光市| 来宾市| 从江县| 土默特左旗| 古交市|