2014-07-09 9 views
2

假設我們有兩個開發人員。一位開發人員在foo/bar/path中的「main」git倉庫中添加了一個子樹(foo /是普通目錄,foo/bar /現在作爲子樹連接到單獨的「子樹」存儲庫)。第二個開發人員拉動變化並獲得foo/bar /。然而,在他的工作副本中,foo/bar /不是git的子樹,它只是主存儲庫中的一個目錄。在第二份工作副本中使用子樹

現在第二個開發人員已經完成了將該子樹切換到子樹存儲庫中的新標記的任務。他認爲他可以使用git subtree pull從子樹存儲庫中提取,但是他需要首先添加子查詢。但git subtree add在他的工作副本不起作用,因爲該目錄已經存在。在他的工作副本中,這個目錄看起來不像是一個子樹。

問題:

  • 如何能在第二顯影劑通知Git是富/酒吧/實際上是一個子樹?
  • 他如何爲這個子樹檢出標籤?

回答

0

我不認爲子樹有任何內置方法讓第二個開發人員知道一個子目錄實際上是一個git子樹。指出這種情況的最好方法可能是在子樹的根目錄中創建一個文件(這是我不會承認的)。

您的示例中的第二個開發人員不應該必須執行git subtree add。他們應該只需要進行一次拉動(再次,他們需要一些其他方式來知道它是從哪裏來的)。

要更新的子樹,第二個開發者: (注:我是新來的樹,所以藉此爲它的價值)

  1. 使他們像往常一樣
  2. 變化提交他們的更改到「主」庫
  3. 推動他們改變「主」庫
  4. 從做樹一拉:git subtree pull --prefix=bar ../bar.git master
  5. 做一個推得到他們的變化子樹:git subtree push --prefix=bar ../bar.git master
0

子樹(與子模塊相比)的全部要點是它們看起來不像存儲庫,並且不需要任何配置文件。 git-subtree使用「git-subtree-」前綴對最初合併提交中後續合併所需的所有信息進行編碼,所以在你的例子中兩個開發者的工作副本之間確實沒有區別。兩者都將同樣能夠git subtree pull ...

如果您希望有明確的(即可識別的)子存儲庫,可以從上游輕鬆更新,請使用git submodule

+0

那麼爲什麼一些使用子樹的例子似乎鼓勵使用'--squash'?另外,你能否提供更詳細的指導說明開發人員應該如何做到這一點? –

+0

我真正想說的是「不要重新發明輪子」。我相應地更新了我的答案。關於'--squash'的部分是誤導性的,我將其刪除。 – Phillip