Как объединить ветви в 2 разных репозитории?

enter image description here

Я новичок в git, и я хотел бы знать, как объединить мастер филиал от Пример Проекта 2 до UAT филиала в Постановка/Поддержка. Я знаю, что можно объединить разные ветви в определенном репозитории, но не уверен, как слияние работает в разных репозиториях.

Что я действительно хочу сделать, это после завершения работы над Пример Проекта 2, Я хотел бы переместить его к UAT ветку для тестирования и т. д., И в конечном счете к производства ветку для релиза.

заранее спасибо за помощь

1 ответов


я бы предложил вам создать локальный клон промежуточного / вспомогательного репозитория. Затем вы добавляете репозитории проекта в качестве дополнительных удаленных репозиториев, что позволяет взаимодействовать с ними в локальном репозитории. Выполните слияния локально и передайте результат в промежуточный репозиторий.

это может быть достигнуто с помощью следующих шагов.

Инициализация и первое слияние

$ git clone -o staging http://staging

это клонирует ваш промежуточный репозиторий. Вам нужно будет заменить "http://staging " С правильным URL-адресом вашего промежуточного/вспомогательного репозитория. Вы также можете указать путь клонирования репозитория в качестве другого параметра. Параметр-o гарантирует, что удаленный репозиторий называется "промежуточным", что помогает отличить его от репозиториев проекта позже.

следующий шаг-добавить удаленный репозиторий для слияния (в этом случае "пример проекта 2")

$ git remote add project2 http://sampleproject2

еще раз заменить "http://sampleproject2 "С URL репозитория " пример проекта 2". Вы также можете изменить "project2", который является именем удаленного репозитория, чтобы лучше соответствовать вашему проекту.

после этого git branch -r покажет ветви как от постановки, так и от project2, как это:

$ git branch -r
staging/Production
staging/UAT
project2/Master
project2/QA
project2/DEV

следующая проверка ветви, которую вы хотите объединить, например:

$ git checkout -b staging_UAT --track staging/UAT

это создает новую локальную ветвь под названием staging_UAT, которая отслеживает удаленная ветвь UAT из промежуточного репозитория. Новое отделение будет проверено немедленно.

теперь у вас есть копия филиала UAT из staging, проверенная. Вы можете объединить изменения из project2:

$ git merge project2/Master

теперь все изменения от мастера ветви project2 объединяются в текущую ветвь (которая является staging_UAT). Возможно, вы захотите взглянуть на git log чтобы увидеть результат. Если он соответствует вашим ожиданиям, вы можете нажать его на постановку репозиторий:

$ git push staging staging_UAT:UAT

делая это, вы нажимаете текущее состояние вашей локальной ветви staging_UAT на ветку UAT в удаленном репозитории, называемом staging.

вы можете обрабатывать другие проекты одинаково, а также добавить ветвь, такую как staging_Production, чтобы объединить ваши изменения в производственную ветвь Staging.

будущие слияния

вы можете использовать тот же Клон для будущих слияний, не делая все клонирование и создание ветвей снова и снова снова. Однако в этом случае вам необходимо обновить локальную информацию об удаленных филиалах:

$ git checkout staging_UAT
$ git pull

сначала вам нужно обновить staging_UAT, чтобы соответствовать текущей версии UAT в промежуточном репозитории. Это делается путем "вытягивания" изменений. Поскольку ветвь staging_UAT была создана с помощью "--track staging / UAT", git знает, откуда вытащить изменения. Если UAT на staging никогда не изменяется каким-либо другим способом, кроме этого (значение: использование именно этого локального клона для staging_UAT), это не требуется.

если UAT изменяется на постановке, и вы не тянете, вы получите ошибку при нажатии, говоря:

Updates were rejected because the tip of your current branch is behind its remote counterpart.

другое обновление влияет на репозиторий Project2:

$ git fetch project2

также могли быть изменены ветви репозитория project2. Как видите git fetch используется для получения этих изменений. Разница между fetch и pull заключается в том, что pull также обновит вашу локальную копию ветви. Как нет локальная копия ветвей project2, fetch-это путь. (На самом деле git pull - это просто ярлык для git fetch и git merge).

если у вас уже есть локальная копия репозитория, содержащего код, вы также можете использовать ее для процесса слияния. Вам просто нужно убедиться, что вы не смешиваете локальную разработку и слияние, и, возможно, вам нужно обрабатывать более удаленные репозитории, поскольку у вас есть еще несколько для вашей разработки.

местные ветвь staging_UAT также можно назвать просто UAT, что делает нажатие довольно простым (git push было бы достаточно в этом случае). Однако это может быть запутанным, поскольку есть ветви с этим именем в нескольких пультах ду.

в качестве альтернативы вы можете изменить настройки"пуш.по умолчанию". См. документацию, чтобы узнать, как это повлияет на ваше нажатие.