(以下是怎樣的一個「理論MCVE」種複雜的,我遇到了組織的源代碼我的工作,你可以把它當作。一個具體的問題,這將是很好的,或者你可以參考它帶來的一般問題,並建議如何解決它們。)管理複雜的存儲庫結構 - 模塊依賴和共享代碼
假設我有模塊代碼A,B,C和D. A取決於B ,光盤; B取決於C; C,D不依賴於其他模塊。 (我使用「模塊」這個術語,因此請不要在這裏挑剔)。
此外,在所有的A,B,C,D中,使用了幾個相同的頭文件,甚至可能是一個編譯對象,將它們放在一起形成第五個模塊是沒有意義的,因爲它會太小而無用。讓我們將foo.h
作爲該類別中的文件之一。
雖然所有這些模塊被保持單個單片代碼庫中,都是很好。一切都完全相同。對象之間沒有連接衝突具有相同功能等
問題是編譯:怎樣使每個B的,C,d爲版本管理信息庫,使:
- 他們每個人可以只用這取決於(或者作爲子模塊/ subrepositories或一些其他方式)的模塊的存在來構建;和
- 我並不需要確保和手動保持相同的文件/更新不同版本,或使結轉承諾從一個庫到下一個(也許除了改變所指向的版本);和
- 當一切都建立起來(即A樓時),構建不涉及和C的雙副本
foo.h
qudaruple副本(一次A和一次B) - 這是我大概總是要確保並保持完美同步。
請注意,當我有更多時間時,我會編輯這個問題以使問題更加具體(即使我有點像廣泛的問題)。我會說在我的具體情況下,代碼是現代C++,CUDA,一些bash腳本和CMake模塊。所以一個面向Java的解決方案不會。
整個系統需要幾個小時才能編譯?如果時間少於2或3小時,我認爲你不應該試圖將它分解成subrepos。 –
@IanRingrose:編譯需要幾分鐘而不是幾個小時。但是,其中一些已經/將會獨立出版(不止一個此類部分);還有不同的人在不同的部分分工的問題,或者根據不同的「帽子」來分擔工作的問題。 – einpoklum
Git有子模塊,它允許您從另一個存儲庫中引用一個存儲庫的特定提交。 (你可以看到子模塊的來源,但不能在沒有跳過的情況下改變它。)這可能是值得一看的,並且關於git子模塊有很多關於SO的問題。 –