Как объединить ветви в 2 разных репозитории?
Я новичок в 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
было бы достаточно в этом случае). Однако это может быть запутанным, поскольку есть ветви с этим именем в нескольких пультах ду.
в качестве альтернативы вы можете изменить настройки"пуш.по умолчанию". См. документацию, чтобы узнать, как это повлияет на ваше нажатие.