Почему GitLab говорит, что существуют конфликты, когда не было коммитов в целевой ветви с момента последнего слияния? - PullRequest
0 голосов
/ 07 сентября 2018

Мы используем GitLab.com для нашего проекта. Мы объединяем код в нашу ветку релиза (master) из нашей ветки QA (qa). Со времени последнего выпуска около месяца назад не было никаких коммитов в ветку master.

Для пары проектов автоматическое слияние завершается неудачно в пользовательском интерфейсе GitLab, и мне приходится делать это вручную через командную строку разрешать конфликты через пользовательский интерфейс GitLab. Я не понимаю, как это может произойти, поскольку на master нет изменений, с которыми можно конфликтовать.

qa      --●--●--●--●--●--
           \           \
master  ----●-----------●--

Когда я объединяю конфликты, я все равно получаю все изменения из ветви qa (git merge -X theirs). Это также не все файлы (к счастью!), Всего 5-10 изменений из 5 файлов, скажем, 300 изменений в 50 файлах.

Но я просто не понимаю, что вызывает эти конфликты.

ПРИМЕЧАНИЕ: я делаю все коммиты с qa при слиянии с master. Теперь я думаю, что это может быть частью проблемы. Не уверен, как, все же.

1 Ответ

0 голосов
/ 08 сентября 2018

Я думаю, что нашел проблему.Это произошло в одном простом проекте зависимости, поэтому служит хорошим примером.

Слияния, которые вообще не работают в пользовательском интерфейсе (те, которые должны решаться локально с помощью CLI) были объединены без вопроса, который я описываю.Я обновил вопрос, чтобы отразить это.

Проблема заключается в том, что GitLab выполняет автоматическую фиксацию слияния из целевой ветви в исходную ветвь * за 1008 * секунд до слияния в нужном направлении.Я проверил, что все проекты, в которых были «конфликты», имели эти плохие слиянияЭто были также проекты, которые не были объединены вручную.

$ git log --abbrev-commit --graph qa master

*   commit 92xxx (tag: v1.3.1, tag: v1.3.0, origin/master, origin/HEAD, master)
|\  Merge: 83xxx 7fxxx
| | Author: Nick
| | Date:   Fri Sep 7 00:52:37 2018 +0000
| |
| |     Merge branch 'qa' into 'master'
| |
| |     v1.3
| |
| |     See merge request translations!17
| |
| * commit 7fxxx
|/  Author: Nick
|   Date:   Fri Sep 7 00:52:37 2018 +0000
|
|       v1.3
|
| *   commit c14xxx (HEAD -> qa, origin/qa)
| |\  Merge: 76xxx 83xxx
| |/  Author: Nick
|/|   Date:   Fri Sep 7 00:52:29 2018 +0000
| |
| |       Merge branch 'master' into 'qa'
| |
| |       # Conflicts:
| |       #   langs/en-US.json
| |
* |   commit 83xxx (tag: v1.2.1, tag: v1.2.0)
|\ \  Merge: 08xxx 73xxx
| | | Author: Nick
| | | Date:   Fri Aug 3 14:09:04 2018 +0000
| | |
| | |     Merge branch 'qa' into 'master'
| | |
| | |     Merge for v1.1.2
| | |
| | |     See merge request translations!13
| | |
m   qa

master - левая строка.83xxx слияние с последнего выпуска.master не имеет коммитов с момента последнего выпуска, кроме этого необъяснимого неудачного слияния.

Так что это объясняет конфликты.Эти конфликты появляются сразу же после открытия запроса на слияние в пользовательском интерфейсе GitLab, поэтому я предполагаю, что создание запроса на слияние является причиной неудачного коммита слияния.Возможно, в игру вступает флажок 'squash commits' (его можно выбрать при создании запроса на слияние, а также с действием слияния уже открытого запроса на слияние).

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

Обновление декабря 2018

РелизсноваЯ обратил внимание.Все еще не уверен на 100%, что происходит.Запуск запроса на слияние для проекта переводов, который имеет нулевые коммиты до master с момента последнего слияния из qa.

Конфликты.Осмотрел их.Не имеет никакого смысла.Не заметил никаких коммитов при обновлении репо в другой вкладке.Нажмите на кнопку «разрешить конфликты» в пользовательском интерфейсе, после завершения разрешения конфликта была создана фиксация от master-> qa.Это просто способ слияния Gitlab.Вы разрешаете конфликты, втягивая мастера в QA, а затем сливаетесь обратно.Это буквально говорит об этом на странице разрешения конфликтов пользовательского интерфейса ?

Или что-то в этом роде.Сводит меня с ума, но у меня нет времени на шутки в день выпуска.

...