2011-07-16 124 views
11

我有一些依賴工作的樹。據我所知,git的子模塊會執行以下操作:Git子模塊的替代?

  • 使用它(主)
  • 主資料庫複製從奴隸
  • 的所有信息在每個工作樹的子目錄,每個工作樹(從)的副本

我不介意回購越來越大,但擁有這些副本對我來說是相當不可接受的。這會迫使我重新組織所有的項目,這樣副本就會被鏈接起來。而且,編輯錯誤的文件很容易導致混淆。

我已經有了另一個想法:

  • 每個主存儲其所有從站的列表。
  • 主人不需要其他信息。
  • 在主設備中進行每次提交時,都會創建從設備中的「snapshot-commit」。
  • 「快照提交」是工作樹當前狀態的快照,它忽略了索引的當前狀態(在丟棄一些未被改變的更改之前,我已經使用「快照提交」)。
  • 「snapshot-commits」被收集到一個分支中,該分支的名字源自主人的名字。提交消息包含主提交的哈希。 (恕我直言,這比淹沒成千上萬的標籤要好。)
  • 結帳工作正常,除非需要遞歸到奴隸。

我能看到的唯一的問題如下:

  • 在奴隸的提交將積累,永遠不會被刪除,即使主承諾不再存在。
  • 在提交中的提交不是自包含的,您可以刪除在主服務器中引用的提交。但我認爲它不可能偶然發生,所以我可以忍受它。
  • 我無法想象,其他git命令如何支持這一點。但再一次,我可以忍受它。

我在問是否有人已經實現它(或者如果這是一個壞主意)。

回答

2

由於父母回購(您的「主」)只存儲對子模塊的嚴格SHA1(在父回購中籤出的子回購)的引用,因此我不確定我是否關注您。
父回購的大小根本不受影響。

subtree merge strategybetter managed though git subtree)會增加父回購的大小,但那(子樹合併)不是你正在談論的。

子模塊的另一種替代方案是git-slave (gits),這有點像你想實現的。

+0

你的意思是,我錯了我的句子「主存儲庫複製了所有從屬的信息」 ?這很可能,但是,我主要擔心的是每棵主樹中的每個從屬樹的副本是否存在(或者我錯了嗎?)。 – maaartinus

+0

@maaartinus:有一個物理副本(因爲它檢出了一定的差異),但是所有的父回購保持是對檢出的提交的引用。請參閱「子模塊的真實性質」:http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194 – VonC

+0

@maaartinus:但是,確實如此,每個父代回購將檢出子模塊,意思是所述子模塊的幾個副本將在任何給定時間存在。 – VonC

11

我認爲這是一個壞主意,因爲它很奇怪,它會帶你走很多事情的支持路徑。

首先澄清:當使用子模塊時,「主」(參考)回購沒有明顯變大。它只存儲一個存儲庫引用(可能是URL)和一個提交ID。但這似乎並不是這裏的關鍵。

當這樣的問題處理有三個基本路徑3,你可以下去,

  1. 在單個存儲庫將所有的東西。你有沒有說服自己10次,你真的需要把事情分開?請記住,您可以從一個回購開始,稍後再分解。另外請記住,git合併實際上是有效的,所以開發者爭用並不是什麼大問題。

  2. 使用一些外部包管理系統。 Git不是,也不會假裝是包管理員。您使用的平臺具有支持更復雜的依賴情況的軟件包管理器的可能性很大。 Maven,rubygems,npm,nuget ...有很多。

  3. 在子目錄中使用'mounted'子模塊。

基本上,子模塊應該是您處理自己的代碼時的最後選擇。它們非常適合與第三方庫打交道,但最終會成爲您自己代碼的極大痛苦。再加上你提出的複雜解決方案,而且工作起來並不會很有趣。

+0

感謝您的澄清和所有建議。我目前正在做的是使用多個eclipse項目,每個項目都有自己的git存儲庫。它們之間的依賴關係足夠弱,以至於無法正常工作,而我之後的解決方案將解決唯一剩下的問題:不時發生引用的需要更改引用的repo中的更改。這使得在這樣一個複雜的邊界上及時回過頭來,我所尋找的可以解決這個問題。我不經常需要它,所以任何可能出現的問題都很少見。安裝的子模塊可以做我所需要的... – maaartinus

+1

在那裏,做了那個,我真的不認爲這是值得的努力。擁有一堆子模塊就是其中的一種,聽起來像是一個非常漂亮和優雅的想法(它就是這樣),但日常使用只是一種痛苦。我不能鼓勵你足夠開始一個單一的回購。 –

+1

我不同意@Ru​​ssellMull,我想鼓勵你不要把所有東西放在一個回購中。將太多的東西合併到一個存儲庫中是一種悲慘的經歷,即使在我自己的項目中,我也是唯一一個處理它的項目。子模塊對於這類事情並不是很好,但是它們比在一個git回購中將無關項目混合在一起要好得多。 –