Slide 1

Slide 1 text

NuGet vs git submodules Евгений Ледовской Ведущий С#-разработчик DotNext Москва, 6 ноября 2019

Slide 2

Slide 2 text

Как мы использовали NuGet

Slide 3

Slide 3 text

Вынесение из проекта общей платформенной части – Commons Project Project Commons

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

1 Невозможность использования обновленного Commons в остальных проектах Commons 1.0.0.2 NuGet B C D 1 Commons 1.0.0.0 NuGet Доработка 1 Доработка 2 Доработка X Доработка Y $$$

Slide 8

Slide 8 text

С течением времени у каждого проекта оказывается свой особенный 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

Slide 9

Slide 9 text

develop Разрозненность используемых версий Commons develop develop master A B C D Commons

Slide 10

Slide 10 text

Консолидация всех 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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

develop Разрозненность используемых версий Commons develop develop master A B C D Commons

Slide 13

Slide 13 text

develop Объединение Commons develop develop develop master A B C D Commons

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Причины отказа от NuGet | Проект Commons дорабатывается часто | Проекты, использующие Commons, дорабатываются неравномерно | Сложно следить за своевременным обновлением Commons во всех проектах

Slide 17

Slide 17 text

Замена NuGet применением git submodules Commons 2.0.0.0 NuGet Доработка 1 Доработка 2 Доработка YY Доработка XX Commons git submodule

Slide 18

Slide 18 text

Почему именно git submodules? | Все проекты, в том числе Commons, у нас находятся в Git | Возможность работать в проектах с исходниками Commons | Возможность применять для Commons общий с проектным Git Flow | Наглядность указания в проекте ссылки на необходимое состояние Commons | Простота настройки автоматической сборки проектов с использованием сервера CI

Slide 19

Slide 19 text

Как мы применяем Git Flow

Slide 20

Slide 20 text

develop Develop-ветки develop develop develop develop git- submodule A B C D Commons git submodule

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

git- submodule Доработка функциональности: выпуск Feature_C develop develop develop Feature_C A B C D Commons git submodule develop develop

Slide 34

Slide 34 text

git- submodule Доработка функциональности: Feature_B develop develop develop Feature_C Feature_B A B C D Commons git submodule develop develop

Slide 35

Slide 35 text

git- submodule Доработка функциональности: завершение Feature_C develop develop develop Feature_C Feature_B A B C D Commons git submodule develop develop

Slide 36

Slide 36 text

git- submodule Доработка функциональности: Feature_D develop develop develop Feature_D Feature_C Feature_B A B C D Commons git submodule

Slide 37

Slide 37 text

git- submodule Доработка функциональности: завершение Feature_B develop develop develop Feature_D Feature_C Feature_B A B C D Commons git submodule

Slide 38

Slide 38 text

git- submodule Доработка функциональности: Feature_A develop develop develop develop Feature_D Feature_C Feature_B Feature_A A B C D Commons git submodule

Slide 39

Slide 39 text

git- submodule Доработка функциональности: завершение Feature_D develop develop develop develop develop Feature_D Feature_C Feature_B Feature_A A B C D Commons git submodule

Slide 40

Slide 40 text

git- submodule Доработка функциональности: завершение Feature_A develop develop develop develop develop Feature_D Feature_C Feature_B Feature_A A B C D Commons git submodule

Slide 41

Slide 41 text

Автоматический контроль совместимости проектов по коммитам git- submodule CI A B C D Commons git submodule develop develop develop develop develop

Slide 42

Slide 42 text

Автоматический контроль совместимости проектов по коммитам git- submodule CI A B C D Commons git submodule develop develop develop develop develop

Slide 43

Slide 43 text

Автоматический контроль совместимости проектов по коммитам git- submodule CI A B C D Commons git submodule develop develop develop develop develop

Slide 44

Slide 44 text

Автоматический контроль совместимости проектов по коммитам git- submodule CI A B C D Commons git submodule develop develop develop develop develop

Slide 45

Slide 45 text

Автоматический контроль совместимости проектов по коммитам git- submodule CI A B C D Commons git submodule develop develop develop develop develop

Slide 46

Slide 46 text

Автоматический контроль совместимости проектов по коммитам git- submodule CI A B C D Commons git submodule develop develop develop develop develop

Slide 47

Slide 47 text

Автоматический контроль совместимости проектов по коммитам git- submodule CI A B C D Commons git submodule develop develop develop develop develop

Slide 48

Slide 48 text

Автоматический контроль совместимости проектов по коммитам git- submodule develop develop develop develop develop CI A B C D Commons git submodule

Slide 49

Slide 49 text

Спасибо за внимание! Евгений Ледовской eledovskoy@custis.ru