2011-05-17 51 views
2

我們正在這裏工作的一個大項目與功能「捆綁」(編輯:「捆綁」只是一個術語,我們用內部來指代一個特定的功能包,並不意味着作爲一個混帳術語)分散到幾個不同的git存儲庫。我正準備向上遊發送一批更改以供審查和測試,但我遇到了一個難題,試圖讓所有內容都能很好地一起玩。拉一個遠程回購,並推送這些文件

我到目前爲止所做的是從包含代碼包的repo到我的主項目中,它的工作原理是clone,它可以在需要的地方獲取文件。但是,當我轉到add/commitpush時,來自「捆綁」回購的文件將不會與它一起使用,大概是因爲它們是我推送的不同git存儲庫的一部分。

讓團隊中的所有其他開發人員每次更改時都會拉上我的「包」(特別是因爲它在開發週期中還有些早,並且看到很多修訂和重構)並不是真的可行的選擇。 ,而且每次我需要發送它們時,我都不想親手複製這些文件。最好是,我可以設置一些事情,以便我可以從我的「捆綁」回購協議中進入我的主要回購協議,然後將整個更改推送出去。

有沒有辦法用git來做我想要的?

+0

「捆綁存儲庫」實際上意味着什麼?你使用'git bundle'命令來傳輸對象而不是普通的裸倉庫嗎?或者,也許你正在使用Git子模塊?如果是這樣,你的「捆綁」如何與子模塊相關? – 2011-05-17 03:06:53

+0

Bundle是我們內部使用的一個術語;這與git無關。我將編輯我的問題來反映這一點。 – Problematic 2011-05-17 03:26:29

回答

1

你的描述仍然是不完全清楚但聽起來您可能需要使用submodulesubtree mergegit subtree(「第三方」工具)。

你應該問問你的項目,看看是否有計劃來處理這種情況。有人可能已經計劃過如何將「捆綁」存儲庫中的內容集成到「主」存儲庫中的其餘代碼中。


Submodules是從一個存儲庫中發佈一個鏈接到另一個(使用.gitmodules文件中的特殊「gitlink」樹條目和數據)的標準方式。子模塊的使用允許其他用戶重新建立在開發過程中本地創建的倉庫庫內設置(聽起來像)。
使用子模塊需要對需要訪問它們的任何其他人員進行一些工作流程更改(即,git submodule update(首次使用--init)以確保他們在更新(例如拉入)「主」存儲庫之後簽出了正確的落實子庫提交。

A subtree merge是一種直接將來自不相關提交(例如,來自庫的存儲庫)的內容合併到主項目的子樹(子目錄)中的方式。只有需要引入(或推出)子樹下內容更新的用戶實際上需要做不同的事情(例如,他們可以使用git merge -s subtree將更新合併到源歷史記錄中)。有些人不喜歡子樹合併,因爲它將主要項目的歷史與子樹的歷史副本結合(「污染」)。 (第三方工具)git subtree tool可以幫助管理正常的子樹合併。例如,git subtree split子命令可以接受主存儲庫歷史記錄上的提交併重寫它們,以使它們顯示在子樹的原始歷史記錄上。這使得對子樹內容進行「本地」更改變得容易,並稍後將其推向「上游」。它還有一個--squash模式,它可以提供正常子樹合併的很多好處,同時防止歷史「污染」。
作者git subtreelinked to a tutorial這似乎相當有用。

+0

子樹合併是我正在尋找的。謝謝! – Problematic 2011-05-18 02:40:16