Создать репозиторий Child Git - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть TFS GIT-репозиторий, который называется Template.Мы хотим создать из него несколько дочерних репозиториев, а затем иметь возможность передавать изменения от родителя к потомку.

Последовательность будет:

Часть 1

  1. Завершите настройку шаблона и назовите его v1.
  2. Создать дочерний элементхранилище App1
  3. Push Template в App1

Part 2 - В какой-то момент в будущем

  1. Внесите изменения в Template иобозначить его v2.
  2. Вставить ярлык v2 в приложение 1.

Я огляделся и не смог найти, как заставить часть 2 произойти.Есть мысли?

1 Ответ

0 голосов
/ 14 декабря 2018

Хотя я думаю, что это будет относительно редкий случай использования, для которого это лучший способ поделиться кодом, давайте посмотрим, что для этого потребуется.

Если вы хотите, чтобы репозиторий Template подталкивал измененияна репо App1, затем в Template необходимо настроить App1 как удаленный.

/repos/template $  git remote add App1 url/of/app1/repo

Тогда Template аналогичен любому локальному репозиторию, способствующему App1.Это означает, что каждый раз, когда вы создаете новое репо приложения на основе шаблона, вам нужно будет добавить его в качестве другого пульта в репо Template.Также обратите внимание, что git push взаимодействует только с одним пультом за раз, поэтому вы, вероятно, захотите собрать скрипт для отправки обновлений во все репозитории приложений.

(В качестве отступления это выглядит задом наперед -и я думаю, что вам было бы лучше сделать Template удаленным для каждого репо приложения и настроить каждое репо приложения на отслеживание, а pull изменить с Template. Это просто выглядит как более дружественный к git способделать то, что вы пытаетесь сделать - и это отразится на сложностях, так как мы продолжим описывать, как на самом деле будет работать процесс push. Но если вам нужен процесс push, то Template «вносит свой вклад» в каждое приложениеРепо, рассматривая репозитории приложений как удаленные, является способом сделать это.)

Теперь дело в том, что push не может выполнять слияния.Таким образом, вам необходимо, чтобы в каждом репо приложения была ветвь, которая только продвигается, когда Template проталкивается к ней, и тогда кому-то еще придется включить эти изменения в ветку (и), используемые для локальных изменений.в приложение.Когда вы переходите от Template к репозиториям приложений, вам необходимо убедиться, что вы вносите новые изменения в ветки шаблонов репозиториев приложений.

По правде говоря, вам, вероятно, лучше иметьтакая ветка, независимо от того, используете ли вы механизм push - или pull.Разница лишь в том, как обновляется ветка Template.Но если вы используете модель, основанную на извлечении, то каждый репо будет отвечать за восходящую связь своей отдельной ветви шаблона с репо шаблона, а не за репо шаблона (и / или выданные ему команды push), поддерживающие все шаблонных связей ветви.

Во всяком случае, тогда в App у вас будет что-то вроде

T0 <--(template)
  \
   A -- B <--(master)

Через некоторое время в репо Template вы вносите некоторые изменения, и вы push эти измененияApp s template ответвление

T0 -- T1 <--(template)
  \
   A -- B <--(master)

и тогда кому-то придется объединить template в master и разрешить любые возникающие конфликты.

T0 ------ T1 <--(template)
  \         \
   A -- B -- M <--(master)

И это может повторитьсяпо мере необходимости.Конечно, если у вас есть несколько веток в репозитории приложения, вам нужно выяснить, как распространять новые изменения шаблона на каждую из них.Это может стать довольно утомительным, если в каждой из них нужно разрешить множество веток и конфликтов (хотя, возможно, вы могли бы использовать git rerere, чтобы сделать его менее хлопотным).Вот почему я думаю, что вместо схемы, основанной на push - или pull, поиск способа разделения общего кода и использование вашей системы сборки для обработки его в качестве зависимости может помочь вам лучше, если это целесообразно длятип общего кода, с которым вы имеете дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...