[英]How do I set up my git repositories to easily be able to reuse projects in Visual Studio
我的問題最好用一個例子來描述。
假設我有一個項目“A”。
我還有一個項目“B”,它取決於“A”。
另一個項目“C”也取決於“A”。
我的“主要”項目取決於“B”和“C”。 它也可能直接取決於“A”。
當“主要”==“D”時,看起來有點像“可怕的繼承鑽石 ”
這些是我的要求:
我希望能夠在“main”的解決方案中編輯項目“A”,“B”和“C”的內容並提交更改(即我不想只包含DLL而是代碼)。 但由於“B”和“C”都依賴於“A”,因此應該強制它們引用相同的提交。
項目“A”,“B”和“C”很可能也會被其他項目引用,因此我不能假設項目“main”的工作目錄的所有權。
此外,應該可以將每個項目的存儲庫與外部存儲庫同步。
項目“A”,“B”,“C”和“主要”應該是
我如何設置我的存儲庫來完成此任務?
使用子模塊方法 ,我建議使用包含依賴項列表的模型,而不是依賴項層次結構:
創建一個“ parent
”倉庫,在其中“ git submodule add
” D
, C
, B
和A
的子模塊:
parent
D
C
B
A
添加編譯每個項目所需的任何符號鏈接( 即使在Windows中 )(意味着從自己的結構中查找其依賴項的源)。
“ parent
”repo將引用表示每個依賴項的SHA1的確切列表,其中包含項目在父repo歷史記錄中的特定時間編譯/運行所需的確切版本。
而且,正如我在“ 子模塊的真實性質 ”中所解釋的那樣,您可以在A
, B
, C
或D
進行任何修改,並推送到各自的上游回購 。
但是你不能忘記回到parent
repo,添加並提交表示依賴回購A
, B
, C
和D
的新狀態的SHA1修改。
這是一個組件的方法 ,其具有解決任何重疊依賴性的優勢在於:如果B
和C
需要不同版本的A
,所述parent
回購將必須選擇一個(並且只有一個)的版本A
。
要添加OP Onur的答案:
依賴關系必須是相對的
不一定:您可以在子模塊中添加符號鏈接,如果它需要查看另一個具有固定路徑的符號鏈接。
創建“
user
”存儲庫如何自動檢出正確的庫集,例如上面的設置中的A和B.
確定A和B的有效起始版本后,您可以在“父”上下文中創建並推送專用於其使用的分支。
然后你讓那些子模塊跟隨那個分支 ,這意味着任何git submodule update --remote
都會檢查子模塊A
和B
專用分支的最新SHA1。
只是為了確保我理解你的方法:
我需要做的事情來設置庫存儲庫:
我需要做的事情是將一組選定的庫包含到一個新項目中:
實際上,這意味着使用這些庫的每個“用戶”項目都由“父”存儲庫中的“from _...”分支和每個使用的庫存儲庫中的“for _...”分支表示。
現在應該看起來像這樣
A
branch "for_user"
branch "master" (== for_parent)
<other branches for each project using this library>
B,C,D
<like A>
parent
submodule A - tracks branch dependent on the current branch
submodule B - tracks branch dependent on the current branch
<other submodules>
branch "master" (== from_parent)
branch "from_user"
<other branches for each project using one of the libraries>
user
<own stuff>
submodule A - tracks branch "for_user"
submodule B - tracks branch "for_user"
開放式問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.