Ошибка Gerrit при отсутствии Change-Id в сообщениях фиксации

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

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

  1. филиала кассе
  2. checkout master
  3. объединить ветку и исправить ошибки слияния
  4. фиксация
  5. головка начала нажима:refs/for / master

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

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

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

remote: Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a

To ssh://prc@test.gerrit.xxx.com:29418/hello_git
 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message)

11 ответов


проверьте, есть ли у ваших коммитов Change-Id: ... в их описаниях. Каждое обязательство должно иметь их.

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

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

выполнить scp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/ в каталог или загрузить их с http://your_gerrit_address/tools/hooks/commit-msg и копию .git / hooks


попробуйте это:

git commit --amend

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

сохранить и нажимаем ее!


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

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

это потому, что Gerrit настроен на требование идентификатора изменения в сообщениях фиксации.

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

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


вы можете быть администратором, выполняющим одноразовый толчок прямо в refs/changes/<change_number>.

например, как только фиксация без идентификатора изменения приземлилась в Subversion, вы вытаскиваете ее из Subversion с помощью git-svn, и вы хотите архивировать ее как набор исправлений Gerrit в изменение Gerrit.

Если это так, вы можете перейти на страницу настроек проекта (http: / / [путь установки] / # / admin / проекты / [project-id]) и временно измените значение "Require Change-Id in commit message" на False.

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


Проверьте git РЕПО перед совершением

gitrepo/.git/hooks/commit-msg

если этот файл отсутствует в этом месте, вы получите эту ошибку "отсутствует идентификатор изменения в сообщении фиксации".

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


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

и что заставляет меня думать, что полезно дать ответ здесь, так это то, что ответ от @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

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

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


вам нужно следовать под инструкциями 2 шагов:

[проблема] remote: подсказка: чтобы автоматически вставить Change-Id, установите крюк:

1) gitdir=$(git rev-parse --git-dir);

2) scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg ${gitdir}/hooks/

обычно $gitdir = ".мерзавец." Вам нужно обновить имя пользователя и ссылку Геррит.


1) gitdir=$(git rev-parse --git-dir);

2) scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg ${gitdir}/hooks/

a) я не знаю, как выполнить Шаг 1 в windows, поэтому пропустил его и использовал жестко закодированный путь в step 2 scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg .git/hooks/

b) в случае, если вы получите ниже ошибки, вручную создайте каталог "крючки".папку с Git

protocol error: expected control record

c) если у вас есть подмодуль, скажем, "XX", тогда вам нужно повторить шаг 2 и на этот раз заменить ${gitdir} на этот путь подмодулей

d) в случае, если scp не распознается windows, дайте полный путь scp

"C:\Program Files\Git\usr\bin\scp.exe"

e).папка git присутствует в вашем РЕПО проекта, и это скрытая папка


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

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

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

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