Подтвердить что ты не робот

Ошибка Gerrit, когда отсутствуют сообщения Change-Id в сообщениях фиксации

Я установил ветку в удаленном репозитории и сделал некоторые коммиты на этой ветке. Теперь я хочу объединить удаленную ветвь с удаленным мастером.

В основном следуют мои операции:

  • ветка проверки
  • мастер проверки
  • слияние и устранение ошибок слияния
  • совершить
  • push origin HEAD: refs/for/master

Но получайте сообщения об ошибках на 5-м шаге:

remote: Resolving deltas:   0% (0/12)

remote: ERROR: missing Change-Id in commit message
...

remote: Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a

To ssh://[email protected]:29418/hello_git
 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message)
4b9b3361

Ответ 1

Проверьте, соответствуют ли ваши коммиты Change-Id: ... в своих описаниях. Каждая фиксация должна иметь их.

Если нет, используйте git rebase -i, чтобы переписать сообщения о фиксации и добавить соответствующие идентификаторы изменений (обычно это SHA1 первой версии проверенного фиксации).

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

Выполнить scp -p -P 29418 [email protected]_gerrit_address:hooks/commit-msg .git/hooks/ в каталоге репозитория или загрузить их из http://your_gerrit_address/tools/hooks/commit-msg и скопируйте в .git/hooks

Ответ 2

Попробуйте следующее:

git commit --amend

Затем скопируйте и вставьте Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a в конец файла.

Сохраните его и нажмите снова!

Ответ 3

Если вам нужно добавить Change-Id в несколько коммитов, вы можете загрузить крючок с сервера Gerrit и запустить эти команды, чтобы добавить Change-Ids ко всем коммитам, которые им нужны сразу. В приведенном ниже примере фиксируются все фиксации на текущей ветке, которые еще не были перенесены в ветвь вверх по течению.

tmp=$(mktemp)
hook=$(readlink -f $(git rev-parse --git-dir))/hooks/commit-msg
git filter-branch -f --msg-filter "cat > $tmp; \"$hook\" $tmp; cat $tmp" @{u}..HEAD

Ответ 4

Это связано с тем, что Gerrit настроен на запрос Change-Id в сообщениях фиксации.

http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-missing-changeid.html

Вы должны изменить сообщения каждой фиксации, которую вы нажимаете, чтобы включить идентификатор изменения (используя git filter-branch), и только затем нажмите.

Ответ 5

Возможно, администратор делает одноразовый push непосредственно в refs/changes/<change_number>.

Например, как только фиксация без Change-Id приземлилась в Subversion, вы вытащите ее из Subversion, используя git -svn, и вы хотите заархивировать ее как патч-набор Gerrit в изменение Gerrit.

Если это так, вы можете перейти на страницу настроек проекта (http://[installation-path]/#/admin/projects/[project-id]) и временно изменить значение "Требовать изменение идентификатора в сообщении фиксации" к ложному.

Не забудьте после этого изменить его на Наследование или Верно!

Ответ 6

Я тоже получил сообщение об ошибке.

и что заставляет меня думать, что полезно дать ответ здесь, что ответ от Rafał Rawicki является хорошим решением в некоторых случаях, но не для всех обстоятельств. пример, который я встретил:

1.run "git log" we can get the HEAD commit change-id

2.we also can get a 'HEAD' commit change-id on Gerrit website.

3.they are different ,which makes us can not push successfully and get the "missing change-id error"

решение:

0.'git add .'

1.save your HEAD commit change-id got from 'git log',it will be used later.

2.copy the HEAD commit change-id from Gerrit website.

3.'git reset HEAD'

4.'git commit --amend' and copy the change-id from **Gerrit website** to the commit message in the last paragraph(replace previous change-id)

5.'git push *' you can push successfully now but can not find the HEAD commit from **git log** on Gerrit website too

6.'git reset HEAD'

7.'git commit --amend' and copy the change-id from **git log**(we saved in step 1) to the commit message in the last paragraph(replace previous change-id)

8.'git push *' you can find the HEAD commit from **git log** on Gerrit website,they have the same change-id

9.done

Ответ 7

Мы решили эту проблему сегодня утром путем повторного клонирования репозитория и повторного применения изменений. Это самый простой способ повторной синхронизации локальной копии с Gerrit. Как всегда, мы сначала создали резервную копию.

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

Ответ 8

Перед выполнением

проверьте репозиторий git
gitrepo/.git/hooks/commit-msg

если этот файл отсутствует в этом месте, вы получите эту ошибку "Отсутствие Change-Id в сообщении фиксации".

Чтобы решить эту проблему, просто скопируйте файл фиксации в папку .git.

Ответ 9

Это также может произойти, если у вас есть это ограничение:

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

и вы мне нравитесь: напишите сообщение фиксации, начинающееся с "#".....

У меня была такая же ошибка, но у меня уже был commit-msg и сделал rebase и все такое. Очень глупая ошибка: D