2011-05-29 40 views
5

我的項目使用了一些第三方庫。我使用http://progit.org/book/ch6-7.html中描述的子樹合併過程。 我想允許其他開發人員做維護庫,並定期合併從圖書館回購更新:使用從多個站點合併Git子樹

$ git checkout rack_branch 
$ git pull 

有沒有一種方法來發布rack_remote和rack_branch,因此他們將在中央存儲庫的一部分,以便其他開發人員也可以使用它們?

回答

2

您應該在項目文檔的某些位置記錄每個子樹的「上游」的前綴,URL和分支。

以下示例顯示此信息通常會記錄在您的子樹合併提交消息中,但這取決於完成合並和/或提取的確切方式。


考慮初始子樹合併使用這些命令創建:

git merge --no-commit sub/master 
git read-tree -u --prefix=sub sub/master 
git commit 

的提交信息將是以下幾點:

Merge remote-tracking branch 'sub/master' 

我們可以看到,在遠程被評爲sub和分支被命名爲master,但我們沒有看到該URL。您可以在最後一步執行手動提交時將該URL添加到消息中。

之後,你可以使用git pull納入新的「上游」的變化:

git pull -Xsubtree=sub sub master 

默認提交信息將包括倉庫URL和分支名稱:

Merge branch 'master' of server:path/to/repository 

在另一方面,直接引用提交對象而不是使用分支名稱(例如15dbbda而不是sub/master)的初始合併和後續合併的變體將會阻止記錄分支名稱;如果有人決定從. remotes/sub/master取代sub master,則不記錄URL。

0

您是否考慮過使用submodules來代替?看起來它會適合你的工作流程。

+0

我將修改正在導入的這些庫,但我不一定要發佈這些修改。子模塊是否允許對外部存儲庫進行本地修改?或者他們只是鏈接到外部存儲庫? – wanderingbear 2011-05-30 06:46:50