Ошибка 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)
Ответы
Ответ 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