Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NuGet vs git submodules

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for CUSTIS CUSTIS
November 06, 2019

NuGet vs git submodules

Выступление Евгения Ледовского, нашего ведущего C#-разработчика, на конференции DotNext (Москва, 6 ноября 2019).

Avatar for CUSTIS

CUSTIS

November 06, 2019
Tweet

More Decks by CUSTIS

Other Decks in Programming

Transcript

  1. 1 Использование стабильной версии Commons в разных проектах с применением

    упаковки в NuGet-пакет Использовать NuGet для платформенной части Commons удобно, если Commons:  дорабатывается нечасто  дорабатывается сразу для всех проектов A Commons 1.0.0.0 NuGet B C D
  2. 1 Доработка пакета Commons для одного из проектов В остальных

    проектах эта доработка не нужна. Пока что не нужна… A Commons 1.0.0.1 NuGet B C D 1 Commons 1.0.0.0 NuGet Доработка 1 Доработка 1
  3. 1 Доработка пакета Commons для одного из проектов A Commons

    1.0.0.2 NuGet B C D 1 Commons 1.0.0.0 NuGet Доработка 1 Доработка 1 Доработка 2 Доработка 2 В остальных проектах эта доработка не нужна. Пока что не нужна…
  4. 1 Невозможность использования обновленного Commons в остальных проектах Commons 1.0.0.2

    NuGet B C D 1 Commons 1.0.0.0 NuGet Доработка 1 Доработка 2 Доработка X Доработка Y $$$
  5. С течением времени у каждого проекта оказывается свой особенный Commons

    B C D A 1 Commons 1.0.0.2 NuGet Доработка 1 Доработка 2 Доработка 1 Доработка 2 1 Commons 1.0.0.0 NuGet 1 Commons 1.2.0.0 NuGet 1 Commons 1.3.0.0 NuGet Доработка X Доработка XX Доработка Y Доработка YY Доработка XX Доработка YY
  6. Консолидация всех Commons в одной версии пакета 1 Commons 1.0.0.2

    NuGet Доработка 1 Доработка 2 1 Commons 1.0.0.0 NuGet 1 Commons 1.2.0.0 NuGet 1 Commons 1.3.0.0 NuGet Доработка XX Доработка YY Commons 2.0.0.0 NuGet Доработка 1 Доработка 2 Доработка YY Доработка XX
  7. Доработка всех проектов для использования консолидированного Commons A B C

    D Commons 2.0.0.0 NuGet Доработка 1 Доработка 2 Доработка YY Доработка XX
  8. Преимущества NuGet | Простота подключения общего стабильного кода к проектам

    | Более быстрая сборка проектов, чем при подключении общего кода в виде исходников | Надежность использования конкретной версии пакета в конкретной версии проекта | Работа с Commons как с платформой, имеющей собственный релизный цикл
  9. Недостатки NuGet | Невозможно работать с исходниками Commons при разработке

    проекта | При доработке проектов приходится постоянно: • подключать Commons в виде исходников • после доработки — выпускать новую версию NuGet-пакета • подключать доработанную версию пакета обратно к проекту
  10. Причины отказа от NuGet | Проект Commons дорабатывается часто |

    Проекты, использующие Commons, дорабатываются неравномерно | Сложно следить за своевременным обновлением Commons во всех проектах
  11. Замена NuGet применением git submodules Commons 2.0.0.0 NuGet Доработка 1

    Доработка 2 Доработка YY Доработка XX Commons git submodule
  12. Почему именно git submodules? | Все проекты, в том числе

    Commons, у нас находятся в Git | Возможность работать в проектах с исходниками Commons | Возможность применять для Commons общий с проектным Git Flow | Наглядность указания в проекте ссылки на необходимое состояние Commons | Простота настройки автоматической сборки проектов с использованием сервера CI
  13. git- submodule Работа с релизами: стабилизация проекта C develop develop

    A B C D Commons git submodule develop develop release/ 2.1.0 develop
  14. git- submodule Работа с релизами: стабилизация проекта B develop develop

    B/release/2.0.0 A B C D Commons git submodule develop develop release/ 2.1.0 develop
  15. git- submodule Работа с релизами: выпуск проекта C develop develop

    B/release/2.0.0 A B C D Commons git submodule develop develop release/ 2.1.0 develop
  16. git- submodule Работа с релизами: стабилизация проекта D develop develop

    B/release/2.0.0 D/release/5.3.0 A B C D Commons git submodule develop develop release/ 2.1.0
  17. git- submodule Работа с релизами: выпуск проекта B develop develop

    B/release/2.0.0 D/release/5.3.0 A B C D Commons git submodule develop develop release/ 2.1.0
  18. git- submodule release/9.0.0 Работа с релизами: стабилизация проекта A develop

    develop develop B/release/2.0.0 D/release/5.3.0 A B C D Commons git submodule develop release/ 2.1.0 develop
  19. git- submodule release/9.0.0 Работа с релизами: выпуск проекта D develop

    develop develop B/release/2.0.0 D/release/5.3.0 A B C D Commons git submodule develop release/ 2.1.0 develop
  20. git- submodule release/9.0.0 Работа с релизами: выпуск проекта А develop

    develop develop B/release/2.0.0 D/release/5.3.0 A B C D Commons git submodule develop release/ 2.1.0 develop
  21. Master-ветки: выпуск проекта D git- submodule master master master master

    develop D/master B/master C/master A B C D Commons git submodule
  22. Master-ветки: выпуск проекта А git- submodule master A/master master master

    master develop D/master B/master C/master A B C D Commons git submodule