設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.13.7 → 2.47.0 無變更
-
2.12.5
09/22/17
- 2.11.4 無變更
-
2.10.5
09/22/17
- 2.3.10 → 2.9.5 無變更
-
2.2.3
09/04/15
- 2.1.4 無變更
-
2.0.5
12/17/14
描述
Git 與 CVS 的不同之處在於,每個工作樹都包含一個帶有專案完整歷史副本的儲存庫,並且沒有任何儲存庫在本質上比其他儲存庫更重要。但是,您可以透過指定一個可供人們同步的單一共享儲存庫來模擬 CVS 模型;本文檔說明如何做到這一點。
需要對 Git 有一些基本的熟悉。閱讀過 gittutorial[7] 和 gitglossary[7] 應該就足夠了。
針對共享儲存庫開發
假設在 foo.com 主機上的 /pub/repo.git 中設定了一個共享儲存庫。然後,作為一個個別提交者,您可以使用以下命令透過 ssh 克隆共享儲存庫:
$ git clone foo.com:/pub/repo.git/ my-project $ cd my-project
然後開始開發。相當於 cvs update 的命令是:
$ git pull origin
這個命令會合併自克隆操作以來其他人可能已完成的任何工作。如果您的工作樹中有未提交的變更,請先提交它們,然後再執行 git pull。
注意
|
pull 命令知道從哪裡取得更新,因為第一個 git clone 命令設定了一些配置變數;有關詳細資訊,請參閱 |
您可以先提交您的變更,然後使用 git push 命令來更新共享儲存庫:
$ git push origin master
將這些提交「推送」到共享儲存庫。如果其他人最近更新了儲存庫,git push 會像 cvs commit 一樣發出抱怨,在這種情況下,您必須先提取任何變更,然後再嘗試再次推送。
在上面的 git push 命令中,我們指定要更新的遠端分支的名稱 (master
)。如果我們省略它,git push 會嘗試更新遠端儲存庫中與本機儲存庫中分支具有相同名稱的任何分支。因此,只要共享儲存庫沒有 master
以外的任何分支,就可以使用以下任何一種方式完成最後的 push:
$ git push origin $ git push foo.com:/pub/project.git/
只要共享儲存庫沒有 master
以外的任何分支。
設定共享儲存庫
我們假設您已經為您的專案建立了一個 Git 儲存庫,可能是從頭開始建立的,或者從 tarball 建立的(請參閱 gittutorial[7]),或者從現有的 CVS 儲存庫匯入的(請參閱下一節)。
假設您現有的儲存庫位於 /home/alice/myproject。建立一個新的「裸」儲存庫(沒有工作樹的儲存庫),然後將您的專案提取到其中:
$ mkdir /pub/my-repo.git $ cd /pub/my-repo.git $ git --bare init --shared $ git --bare fetch /home/alice/myproject master:master
接下來,給予每個團隊成員對此儲存庫的讀/寫存取權。一種簡單的方法是給予所有團隊成員對儲存庫所在機器的 ssh 存取權。如果您不想在機器上給予他們完整的 shell,有一個受限的 shell,只允許使用者執行 Git 推送和提取;請參閱 git-shell[1]。
將所有提交者放在同一個群組中,並讓該群組可以寫入儲存庫:
$ chgrp -R $group /pub/my-repo.git
請確保提交者的 umask 最多為 027,以便他們建立的目錄可以被其他群組成員寫入和搜尋。
匯入 CVS 封存檔
注意
|
這些說明使用 Git 附帶的 git-cvsimport 指令碼,但其他匯入器可能會提供更好的結果。有關其他選項,請參閱 git-cvsimport[1] 中的註記。 |
首先,從 https://github.com/andreyvit/cvsps 安裝 2.1 或更高版本的 cvsps,並確保它在您的路徑中。然後,cd 到您感興趣的專案的已簽出的 CVS 工作目錄,並執行 git-cvsimport[1]:
$ git cvsimport -C <destination> <module>
這會將命名 CVS 模組的 Git 封存檔放在 <destination> 目錄中,如果需要,將會建立該目錄。
匯入會從 CVS 簽出每個檔案的每個修訂版本。據報導,cvsimport 平均每秒可以處理約 20 個修訂版本,因此對於中型專案,這應該不會花費超過幾分鐘的時間。較大的專案或遠端儲存庫可能需要更長的時間。
主幹儲存在名為 origin
的 Git 分支中,其他 CVS 分支儲存在名稱相同的 Git 分支中。主幹的最新版本也會留在 master
分支中簽出,因此您可以立即開始添加自己的變更。
匯入是增量的,因此如果您下個月再次呼叫它,它將提取這段時間內已進行的任何 CVS 更新。為了使這能夠正常運作,您不得修改已匯入的分支;相反,請為您自己的變更建立新的分支,並根據需要合併已匯入的分支。
如果您想要一個共享儲存庫,您需要如上所述建立一個已匯入目錄的裸克隆。然後,為了合併增量匯入的目的,將已匯入的目錄視為另一個開發克隆。
進階共享儲存庫管理
Git 允許您指定稱為「hook」的指令碼,以在某些點執行。例如,您可以使用這些指令碼將對共享儲存庫的所有提交發送到郵件清單。請參閱 githooks[5]。
您可以使用更新 hook 來強制執行更細微的權限。請參閱 使用更新 hook 控制對分支的存取。
為 Git 儲存庫提供 CVS 存取權
也可以為 Git 儲存庫提供真正的 CVS 存取權,以便開發人員仍然可以使用 CVS;有關詳細資訊,請參閱 git-cvsserver[1]。
替代開發模型
CVS 使用者習慣於給予一群開發人員對共用儲存庫的提交存取權。正如我們所看到的,這在 Git 中也是可能的。但是,Git 的分散式特性允許其他開發模型,您可能需要先考慮其中一個是否更適合您的專案。
例如,您可以選擇一個人來維護專案的主要公共儲存庫。然後,其他開發人員克隆此儲存庫,並在他們自己的克隆中工作。當他們有一系列滿意的變更時,他們會要求維護者從包含變更的分支中提取。維護者會檢閱他們的變更,並將它們提取到主要儲存庫中,其他開發人員會根據需要從該儲存庫中提取以保持協調。Linux 核心和其他專案使用此模型的變體。
對於小型群組,開發人員可能只需從彼此的儲存庫中提取變更,而無需中央維護者。
GIT
屬於 git[1] 套件的一部分