2012-09-13 161 views
17

我們的團隊已經嘗試使用git子模塊來完成大部分產品共享的一些核心CRUD功能。我們還成功地將Nuget軟件包(現在自行託管)用於一些常用實用程序。Git子模塊vs Nuget套件

我們的核心功能經常發生變化,以至於保持子模塊的正確提交被證明是我們所期望的更多麻煩事。我正在考慮將核心功能從一個子模塊轉移到一個Nuget包,但是我想知道是否頻繁更新這些包會讓Nuget更加痛苦。

有沒有人有任何經驗和指導,我可能會遇到什麼其他挑戰之前對我們的架構和過程進行這種稍微侵入性的改變?

+0

SourceTree會自動檢測到子模塊包含未提交的編輯,並在您提交父項目時提示您提交它們。 –

+0

我想知道你最終會得到什麼?我們考慮從Nuget到git子模塊。我不喜歡我們的nuget軟件包不包含pdb文件(以減小大小)。調試比較複雜。如何在解決方案中包含所有項目,並在調試時加入。另一個潛在的問題是存儲大小。我們使用sonatype nexus,並且需要對包裝有近乎無限的保留政策,因爲如果它們是10歲,可能需要一些包裝。由於這些包交叉依賴關係,nuget archives/packages將會有重複的dll。害怕它需要大量的空間 – user1325696

回答

3

至於什麼,它取決於。您是否考慮過使用單獨的CI包存儲庫,其中對核心模塊的每次提交都會生成一個CI包?

由於NuGet尚未完全支持SemVer(例如預發佈版本+內部版本號),因此最大的挑戰是套件版本

編輯:nuget.org現在支持SemVer 2.0軟件包版本。請參閱此規格:https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29

正確使用SemVer。您通常不知道預先發布的版本號,因此您的CI軟件包版本將從最新的穩定版本開始繼續。這樣的CI軟件包將被視爲預發佈版本。

例如:2.2.0-CI201209140650(這是2012年4月6日在06:50發佈的CI版本,用於即將發佈的2.2.0版本)< - 注意:此發行版本仍然可以更改,但總會有更新路徑。

如果您採用SemVer v2.0.0,您甚至可以採用以下示例:2.2.0-CI.2012.09.14.06.50

重要提示: nuget.org(和程度上任何其他的NuGet服務器/服務在那裏如MyGet或VSTS)不支持只能通過建立元數據不同的多個版本的包

這對我使用這些約束(和一些適當的TeamCity構建配置)有效。 因此,在短期,這些都是麻煩:

  • 適當版本
  • 提醒,選擇合適的包源(讓你的CI PKGS從預發佈和版本分開,雖然在技術上你的CI包版本化爲預發佈版本)
  • 如果預發佈標記按字符串排序高於「CI」(例如「Alpha」),則從CI pkg升級到預發佈版本可能會造成問題。在這種情況下:uninstall-package「CI」後跟安裝包「Alpha」。

希望這有助於!

+0

Nuget是否仍然不支持正確的SemVer? – diegohb

+0

nuget.org最近支持SemVer 2.0。將相應地更新我的回覆。有關nuget.org如何支持semver 2.0的詳細信息,請參閱此規範:https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29 –