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

NuGet vs git submodules

CUSTIS
November 06, 2019

NuGet vs git submodules

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

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