一、流行的版本控制系統
· cvs
· subversion
· arch
· bazaar
· bitkeeper
二、什麼是 git?
非常簡單地說,git 是 linus torvalds 最近實現的源**管理軟體。正如所提供的文件中說的一樣,「git 是乙個快速、可擴充套件的分布式版本控制系統,它具有極為豐富的命令集,對內部系統提供了高階操作和完全訪問。」
torvalds 開始著手開發 git 是為了作為一種過渡方案來替代 bitkeeper,後者之前一直是 linux 核心開發人員在全球使用的主要源**工具。開放原始碼社群中的有些人覺得 bitkeeper 的許可證並不適合開放原始碼社群的工作,因此 torvalds 決定著手研究許可證更為靈活的版本控制系統。儘管最初 git 的開發是為了輔助 linux 核心開發的過程,但是我們已經發現在很多其他自由軟體專案中也使用了 git。例如,x.org 最近就遷移到 git 上來了,很多 freedesktop.org 的專案也遷移到了 git 上。
git 目前主要由尋找 cvs 或專有**管理解決方案替代物的軟體開發人員所使用。git 與 cvs 有很多區別:
· 分支更快、更容易。
· 支援離線工作;本地提交可以稍後提交到伺服器上。
· git 提交都是原子的,且是整個專案範圍的,而不像 cvs 中一樣是對每個檔案的。
· git 中的每個工作樹都包含乙個具有完整專案歷史的倉庫。
· 沒有哪乙個 git 倉庫會天生比其他倉庫更重要。
三、安裝
有了這個 tarball 之後,請確保初始安裝所依賴的包都已經安裝了。系統中必須包含以下包,以及相應的開發標頭檔案:
· zlib
· libcurl
· libcrypto(openssl)
· rsync(2.6.0 或更高版本)
$ tar -jxvf git-1.4.0.tar.bz2
或$ tar -zxvf git-1.4.0.tar.gz
$ cd git-1.4.0/
$ make prefix=/usr/local install
$ sudo make prefix=/usr/local install
您會被提示輸入 sudo 密碼才能繼續安裝。現在就已經準備好使用 git 工具了。
四、獲得最新的核心源**樹
在使用 git 管理源**倉庫時,我們可以使用兩種方法開始我們的工作。我們可以使用現有**的乙個本地目錄,然後從中生成乙個倉庫;也可以對映其他人發布的倉庫。
對於本文的目的來說,我們將獲得 torvalds 發布的 git 倉庫的乙個映象。下面的命令將建立乙個名為 linux-2.6 的 git 倉庫。這個目錄包含了乙個隱藏目錄 .git/ 。
$ git-clone \
git: \
linux-2.6
這個步驟會執行很長時間,因為 git 正在將核心源**(這有數百兆大)從 kernel.org 傳輸到本地機器上。輸出結果可能有些晦澀難懂,但是如果您有乙個快速的 internet 鏈結,卷屏的速度應該相當快。輸出結果應該類似於圖 1 所示。
$ cd linux-2.6
現在,我們應該在本地機器上有乙個可以工作的 linux 2.6 倉庫了!此時我們就可以對這個倉庫進行一些基本的操作了。
五、更新本地 git 倉庫
在使用 git 時,我們通常可以假設自己的倉庫可能比 kernel.org 的倉庫有些滯後。因此我們通常都是首先將自己的倉庫更新成最新的上游核心樹。這個過程有時稱為快速合併(fast-forward merge)。嚴格來說,我們現在並不需要執行這個過程,因為我們剛剛安裝了自己的倉庫,它應該還沒有過期。但是檢查一下畢竟沒有壞處:
$ cd linux-2.6
$ git-pull git:
如果成功,我們就應該會看到類似於下面的輸出結果:
receiving file list ... done
sent 130 bytes received 21677 bytes 14538.00 bytes/sec
total size is 127865858 speedup is 5863.52
already up-to-date.
如果我們的倉庫不是最新的,就會看到有些內容通過網路傳輸到本地機器上了。
六、從倉庫中匯出檔案
我們需要將檔案從 git 倉庫(隱藏目錄中的那些檔案)中匯出到工作目錄中才能開始自己的 hack 過程。下面的命令會在當前目錄中寫入沒有隱藏的目錄,其中包含了 linux 的源**:
$ git-checkout
如果您希望覆蓋本地修改,可以使用 -f 選項匯出檔案,這樣就可以將您帶回到乙個乾淨的狀態:
$ git-checkout -f
現在在當前工作目錄中,我們應該就可以看到熟悉的 linux 源**目錄結構了,然後我們可以對這些源**任意進行修改。
七、修改現有檔案
我們現在可以修改所選擇的任何檔案。舉乙個簡單的例子來說,我們將修改 docs 目錄中的一些內容:新增一條以後可以很容易識別的資訊。為了讓我的例子更容易試驗,我沒有選擇修改源**;不過只要您希望,歡迎繼續重寫整個核心的子系統。
$ vi ./documentation/managementstyle
顯 然,我使用的是 vi;不過您當然可以使用自己喜歡的任何編輯器來完成這項工作。在編輯檔案時,我在第一段前面新增了一行:「eli shall be in charge of managing sandwich consumption. see documentation/sandwiches for more.」
如果您對自己所做的修改非常滿意,並且覺得自己已經準備好將其作為倉庫的乙個永久部分了,就需要使用下面的命令匯入您的修改:
$ git-commit documentation/managementstyle
您會被提示說要求提供乙個提交訊息,它是乙個使用者生成的注釋,用來幫助其他開發人員(也可能是您自己以後)理解剛才的實現到底進行了哪些修改。在我們的例子中,提交訊息是乙個描述剛才對文件所做修改的短句。
如果您希望檢查一下到目前為止工作的狀態,可以執行 git-log 來檢視本地倉庫的歷史(它繼承了所轉殖的倉庫的資訊)。您的提交訊息應該在日誌的最上面。
八、新增或刪除檔案
但是請等一下!我們還沒有新增 documentation/sandwiches 檔案呢,因此我們需要將其新增到工作目錄中,並告訴 git 何時這個檔案已經準備好了。我使用 echo 命令建立了想要新增的檔案,因為這只是乙個簡單的例子而已。同樣,您也可以使用自己喜歡的工具。
$ echo "turkey is superior" > documentation/sandwiches
現在我們已經新增了乙個檔案,接下來需要將這個檔案新增到 git 中,從而讓 git 了解這種變化,然後才能提交這個版本。我們可以通過執行下面的命令來完成這些任務:
$ git-add documentation/sandwiches
$ git-commit documentation/sandwiches
如果您新增了多個檔案,可以在同一行中的 git-add 命令後面列出這些檔案,不過您也不必一次將它們全部新增到倉庫中去。如果要刪除某個檔案,並且沒有 git-add 之類的特殊命令;您只需要刪除這個檔案,然後提交就可以了。
現在應該檢視一下 git-log,從而確保到現在為止所做的事情都是正確的。這一次,我們將使用 -p 選項來以單獨的補丁格式檢視日誌。
$git-log -p
九、建立 diff 檔案
最後,我們希望生成乙個包含您修改後的檔案和原檔案之間區別的文字檔案。這個檔案通常是使用 diff 工具建立的,因此就稱為 diff 檔案。diff 可以幫助我們建立補丁檔案(patch file),後者是我們向很多開放原始碼軟體專案傳送**提交時通常使用的方法。
十、git 還可以幹什麼?
假設我們已經有了乙個名為 release.tar.gz 的標準 release tarball,可以執行下面的命令來建立乙個本地的 git 倉庫:
$ tar -zxvf release.tar.gz
$ cd release
$ git init-db
我們可以看到訊息說 git 是 「預設於本地儲存區域的」。這些訊息都是正常的,說明我們有乙個 git 倉庫。
現在我們已經對工作目錄進行了初始化,接下來在專案目錄中應該會看到乙個新目錄 .git。為了告訴 git 我們希望對這個專案中的每個檔案都進行跟蹤,請執行下面的命令:
$ git add .
最後,使用下面的命令將所監視的檔案提交到倉庫中:
$ git commit -a
同樣,系統會提示我們輸入提交訊息。從現在開始,我們就可以在自己的 git 倉庫中使用 git 所提供的完整功能了,例如對實驗特性進行分支,為了追蹤回歸測試問題而將**一分為二,並使用常見的版本歷史功能。
十一、結束語
現在我們已經知道如何使用 git 來獲取 linux 核心源**和其他 git 管理的專案了,接下來可以選擇使用 git 來管理下乙個開發專案。 git 仍然相對較新,仍然處於不斷開發中。
git 使用心得
比起svn,git有許多強大之處,比如 本地可以儲存整個修改 提交的歷史記錄 這一點對於離線開發尤其有幫助 支援一次次的增量合併rebase,適合多人合作。不過,再強大的工具,也要 會家 善使,這裡基本 常用的命令就要熟練掌握並且深刻理解,對於一些場景也能夠做到運用自如。以下提供一些問題場景及其解決...
git使用心得
在 git 內都只有三種狀態 已提交 committed 已修改 modified 和已暫存 staged 已提交表示該檔案已經被安全地儲存在本地資料庫 中了 已修改表示修改了某個檔案,但還沒有提交儲存 已暫存表示把已修改的檔案放在下次提交時要儲存的清單中。常用命令 git clone 位址 git...
GIT使用心得
git和svn不同,git的 有三份,分為 本地 本地庫 reponsitory乙份。當commit時,是將本地 提交到本地庫,然後再進行push操作才是將 提交到伺服器。專案哪怕沒有衝突,也必須要先更新後才能提交 在日常開發中有衝突時在所難免的,如何使用eclipse上的git工具進行衝突解決操作...