2013-03-12 81 views
3

我安裝使用Git的書這裏所描述的結構的兩個倉庫:http://git-scm.com/book/ch6-7.html。基本上,我想保持一個回購的副本和它在原產地的主分支之間的關係。我知道你可以用子模塊做到這一點,但更新它們的過程似乎有點麻煩,我被告知(並且已經閱讀)子樹更容易處理。無論如何,我設置了「RepoA」,在其中有一個「RepoB」的子樹。我遵循鏈接中提供的步驟來開球。Git的子樹合併消除分支的變化被合併到

我在「RepoA」做出重大修改的子樹。與此同時,我的團隊中的其他人正在對「RepoB」的主人進行修改。當所有的事情都說完後,我期望我可以從「RepoB」origin/master和subtree中將這些更改合併到RepoA中的子樹中。然而,當我這樣做(使用帶有-s子樹合併選項--squash和--no提交),所有我在RepoA的子樹所做的更改將被刪除。即使添加到子樹中的新文件也被刪除!爲什麼是這樣?我誤解了使用子樹嗎?我是否合併不當?任何幫助將不勝感激!

此外,如果它不可能有子樹合併正確合併這些,是我將它們合併做手工,手工,並創建一個新的項目結構,唯一的選擇?

謝謝!

回答

0

的「git的閱讀樹」步如果RepoB子樹存在,那麼進入RepoA不起作用。跳過讀取樹導致所有文件被本地刪除。 (重新開始)

的RepoB子樹必須git的從被局部除去。在那之後,git-read-tree會工作,合併對於文件和歷史都是正確的。

與RepoA與從先前的合併一個RepoB_subtree克隆啓動。

git remote add -f RepoB <RepoB-url> 
git merge -s ours --no-commit RepoB/master 
git rm -r RepoB_subtree 
git read-tree --prefix=RepoB_subtree/ -u RepoB/master 
git commit -m "Subtree merge of RepoB/master." 

RepoA歷史顯示整個RepoB提交塊首先顯示。以前的子樹合併提交顯示在沒有任何RepoB歷史記錄的RepoA中。

RepoA中RepoB歷史的組織形式與我所預期的並不是線性的,但回想起來,RepoA中的RepoB子樹的歷史是完整且易於閱讀的。