24

Alrighty然後,我的問題的短版將是:Git和Visual Studio項目引用

什麼是處理在Git項目的引用,當你有跨多個解決方案共享項目的最佳途徑,應該怎麼我的Git回購有組織?

長的版本是:

我們是一個小的開發團隊(5個開發人員),目前我們使用TFS作爲我們的源代碼控制和構建服務器和Visual Studio是我們選擇的IDE。我一直熱衷於嘗試新事物,並試圖改進我們的開發環境,因此我決定閱讀Git,以瞭解它是否可以替代TFS的源代碼控制部分。 我們只是將Jira整合到我們的工作流程中,所以我決定試試Stash作爲我們的Git環境,因爲它與Jira的整合程度如何。我現在正在試圖找出組織git repos的方式,這就是我來這裏的原因。現在我要描述我們的解決方案有多少組織。

我們有一堆解決方案。有些是庫,有些是通過Visual Studio中的Project引用引用這些庫的程序。

所以最讓我迷惑的是如何處理在許多解決方案中引用的庫?

我們應該開始對我們的庫進行版本控制,並將每個庫都放在單獨的回購庫中嗎?看起來像這樣,當一個庫接收到一個必須部署的更新並且該庫被20多個解決方案使用時,這將涉及到大量的額外維護。我錯了嗎 ? 我看到的另一個缺點是在Visual Studio中不會有更多的Project引用,它會使調試更加乏味。

我是否應該使用我們的所有解決方案製作大回購,並且這樣我們的所有參考都是最新的?

我也想過,也許我可以製作我們自己的nuget存儲庫,它包含所有的庫,這樣就不會在需要時更新引用的庫。這只是一個想法,我沒有正確地看待這個問題,所以我不確定這是否會帶來任何好處。

那麼,有沒有人可以給我一些建議呢?

+1

我認爲「好吧,我的問題的簡短版本將是」是指向你的完整問題。 –

+2

兩個版本都詢問相同的問題,但是較長的版本包含一些背景;) –

+0

您可能想要考慮正確使用git子模塊。 – Till

回答

16

這是其中一個不幸沒有答案的問題 - 這取決於。

最簡單的解決方案是始終擁有一個存儲庫。這避免了用不同版本管理多個存儲庫的許多問題。但是,如果你有一個單一的版本,這隻有真正的作品;幾乎不可能在同一個存儲庫中爲兩個產品提供不同的發佈週期。那種方式就是瘋狂。隨着儲存庫增長到任何非顯着大小,它也不會真正擴展。

正如Till指出的那樣,一個選項是Git Submodules。這將允許您在特定的提交或分支中動態加載另一個存儲庫的源。當然,這還取決於整體host of problems,一些專用的,所以子模塊和其它的是鏈接庫的只是性質。*

有些人很喜歡Git Subtree,這有點作弊,讓你反覆提取,然後導入的歷史跨存儲庫的文件夾,然後再返回。

最後,您可以依賴依賴關係管理工具,具體取決於您的構建環境。我不太瞭解Visual Studio的評論。在Atlassian,我們(目前)使用Maven來解決這個問題。如果你使用JS,它可能是NPM/Bower,在Ruby上它就是Gems。如果不得不發佈一個新版本的Library X,只是爲了對Y程序做一個小小的修改,但是大多數情況下它運行得很好,這可能令人沮喪。

這確實是一個持續存在的問題,而我知道的事情每天都會讓我感到厭煩。我覺得有可能有​​一個更好的解決方案,結合最好的子模塊和依賴管理,但我還沒有找到它。

我希望有幫助嗎? *我自己對子模塊的最大抱怨,拋開工具問題,它鼓勵人們檢查絕對URL到其他存儲庫。這完美的工作,直到你決定遷移你的Git服務器或其中一個存儲庫,現在一切都被破壞了。我發現有一天你可以使用relative paths,這是整潔,但不能解決問題。

+1

感謝您的回答。我對這個問題的瞭解越多,看起來就越多,就像你說的那樣,沒有最好的解決方案。我想我只能權衡使用單個回購或使用依賴管理工具的優缺點。 –

+0

一個非常好的問題和一個非常公平的答案。謝謝,你們倆。順便說一句,任何更新?有什麼更好的方法來處理它? TFS可以很好地處理交叉解決方案的引用,我認爲VS的git插件應該得到改進,以完成與TFS插件相同的工作。 – Tohid

+0

不幸的是,在Visual Studio 2015中git集成並沒有解決這個問題。除非我錯過了什麼? – kukabuka

相關問題