簡體   English   中英

如何設置我的git存儲庫以便輕松地在Visual Studio中重用項目

[英]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”和“主要”應該是

我如何設置我的存儲庫來完成此任務?

不要(ab)使用git或任何版本控制系統。

使用NuGet

您不希望直接包含其他項目。 相反,將每個依賴項打包到.nuget包中,並將其用於依賴項處理。 雖然子模塊似乎是問題的解決方案,但在實踐中,使用適當的依賴關系管理而不僅僅包括其他項目要好得多。

TeamCity和其他CI系統,甚至TFS,允許您自動構建新的nuget包,TeamCity也可以充當nuget服務器。

如果您不想使用“真正的”NuGet服務器,您也可以在Intranet上的某個位置使用共享驅動器。

使用子模塊方法 ,我建議使用包含依賴項列表的模型,而不是依賴項層次結構:

創建一個“ parent ”倉庫,在其中“ git submodule addDCBA的子模塊:

parent
  D
  C
  B
  A

添加編譯每個項目所需的任何符號鏈接( 即使在Windows中 )(意味着從自己的結構中查找其依賴項的源)。

parent ”repo將引用表示每個依賴項的SHA1的確切列表,其中包含項目在父repo歷史記錄中的特定時間編譯/運行所需的確切版本。

而且,正如我在“ 子模塊的真實性質 ”中所解釋的那樣,您可以在ABCD進行任何修改,並推送到各自的上游回購
但是你不能忘記回到parent repo,添加並提交表示依賴回購ABCD的新狀態的SHA1修改。

這是一個組件的方法 ,其具有解決任何重疊依賴性的優勢在於:如果BC需要不同版本的A ,所述parent回購將必須選擇一個(並且只有一個)的版本A

要添加OP Onur的答案:

依賴關系必須是相對的

不一定:您可以在子模塊中添加符號鏈接,如果它需要查看另一個具有固定路徑的符號鏈接。

創建“ user ”存儲庫

如何自動檢出正確的庫集,例如上面的設置中的A和B.

確定A和B的有效起始版本后,您可以在“父”上下文中創建並推送專用於其使用的分支。
然后你讓那些子模塊跟隨那個分支 ,這意味着任何git submodule update --remote都會檢查子模塊AB專用分支的最新SHA1。

只是為了確保我理解你的方法:

我需要做的事情來設置庫存儲庫:

  1. 創建“父”存儲庫
  2. 為每個庫創建一個子模塊
  3. 依賴關系必須是相對的,即如果D依賴於B,則路徑應該看起來像../../B/some文件夾
  4. 父存儲庫中的每個提交都代表一個有效的庫組合

我需要做的事情是將一組選定的庫包含到一個新項目中:

  1. 創建“用戶”存儲庫
  2. 在所需的庫中創建一個分支各自的存儲庫(例如A和B),如“for_user”,並在“user”項目中跟蹤子模塊。
  3. 在“父”存儲庫中創建一個“from_user”分支,用於跟蹤已使用庫的更改( 是否可以在每個分支基礎上跟蹤存儲庫分支? )。
  4. 包括所選的庫集,例如“for_user”分支中的A和B.
  5. 在A和/或B中進行的更改將轉到此分支,並且可以合並到“父”主分支中(如果合適)和/或合並到使用這些庫的其他項目的其他“from _...”分支中。 “父”項目用於創建一致的庫集。

實際上,這意味着使用這些庫的每個“用戶”項目都由“父”存儲庫中的“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"

開放式問題:

  • 如何在上面的設置中自動檢出正確的庫集,例如A和B? 可以查看所有可用的庫,但這將以某種方式消除每個庫需要單獨的子模塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM