Как правильно настроить двустороннюю синхронизацию c между Azure DevOps и GitHub - PullRequest
1 голос
/ 24 февраля 2020

Я хочу создать двустороннюю синхронизацию c между Azure DevOps и GitHub, выполнив следующие действия:

  1. Создайте конвейер Azure DevOps с триггером CI, который pu sh меняется с Azure DevOps репо на ветку в GitHub
  2. Создайте второй конвейер, который прослушивает изменения из GitHub и возвращает их обратно в ветку в Azure DevOps

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

git clone --mirror <source>
cd <repo name>
git remote add --mirror=fetch target <target>
mkdir ../workdir
git fetch origin
git --work-tree=../workdir/ checkout <branch name>
git push target <branch name>

Когда я тестирую конвейер, я получаю ошибку, подобную этой:

! [rejected]        <branch name> -> <branch name> (fetch first)
error: failed to push some refs to 'git@github.com:<target>/<target repo>.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Я отнюдь не эксперт по git, поэтому любая помощь очень ценится.

ОБНОВЛЕНИЕ # 1

На снимках ниже показан конвейер, который я построил для pu sh изменяется на GitHub (на основе этого ответа ), но он все еще не работает.

enter image description here

enter image description here

Это новая ошибка:

Cloning into '<repo>'...
Switched to a new branch '<branch name>'
Branch '<branch name>' set up to track remote branch '<branch name>' from 'origin'.
warning: adding embedded git repository: <repo>
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint:   git submodule add <url> <repo>
hint: 
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint: 
hint:   git rm --cached <repo>
hint: 
hint: See "git help submodule" for more information.
[<branch name> XXXXXXX] Update from Azure DevOps
 1 file changed, 1 insertion(+)
 create mode 160000 <repo>
To git@github.com:<org>/<repo>.git
 ! [rejected]        <branch name> -> <branch name> (fetch first)
error: failed to push some refs to 'git@github.com:<org>/<repo>.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

UPDATE # 2

Я обновил скрипт (показанный ниже), чтобы получать изменения из GitHub в Azure DevOps на основе обновленного ответа, но он все еще не работает.

git clone git@github.com:XXX/XXX.git 

cd <repo folder>

git config --global user.email "XXX"
git config --global user.name "XXX"

git checkout <source branch>
git add .
git commit -m "Pull from GitHub"
git push https://{AzureDevopsPAT}@dev.azure.com/{org}/{pro}/_git/XXX.git <target branch>

Это ошибка:

Cloning into '<repo>'...
Warning: Permanently added the RSA host key for IP address '140.82.113.4' to the list of known hosts.
Already on '<source branch>'
Your branch is up to date with 'origin/<source branch>'.
On branch <source branch>
Your branch is up to date with 'origin/<source branch>'.

nothing to commit, working tree clean
error: src refspec <target branch> does not match any
error: failed to push some refs to '***'

1 Ответ

0 голосов
/ 24 февраля 2020

если я также внесу изменение в GitHub, могу ли я вернуть его обратно к Azure DevOps?

Для этой проблемы сначала вы можете создать новое определение сборки:

enter image description here

enter image description here

В задачах командной строки сначала настройте свою информацию с помощью команды 2:

git config --global user.email ""
git config --global user.name ""

Второй шаг: мы используем эту команду, чтобы l oop через все ветви в github:

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

Последний шаг к pu sh для всех филиалов:

git push https://$(VSTSToken)@dev.azure.com/xxx/_git/xxx -u --all

Чтобы запускать сборку каждый раз, когда происходит изменение кода, нам нужно go, чтобы вызвать вкладку и настроить ее следующим образом:

enter image description here

Что касается синхронизации azure devops repo to github repo, см. Мой предыдущий ответ .

Обновление :

Для отдельной ветви: pu sh обновление с репозитория github до azure devops репо, см. ниже команду:

git clone https://github.com/XXX/XXX.git
git config --global user.name "XXX"
git checkout master
git add .
git commit -m "abc"
git push https://{AzureDevopsPAT}@dev.azure.com/{org}/{pro}/_git/delete.git

enter image description here

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