Ошибка Gerrit при отсутствии Change-Id в сообщениях коммита - PullRequest
43 голосов
/ 13 января 2012

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

В основном мои операции выполняются следующим образом:

  1. Отделение оформления заказа
  2. Мастер проверки
  3. ветвь слияния и исправление ошибок слияния
  4. 1012 * совершить *
  5. Заголовок push-координат: 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)

Ответы [ 12 ]

73 голосов
/ 13 января 2012

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

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

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

24 голосов
/ 11 июня 2013

Попробуйте:

git commit --amend

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

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

7 голосов
/ 13 сентября 2014

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

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 голосов
/ 13 января 2012

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

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

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

2 голосов
/ 13 июля 2015

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

Например, когда коммит без Change-Id попал в Subversion, вы извлекаете его из Subversion с помощью git-svn и хотите заархивировать его как набор патчей Gerrit в изменение Gerrit.

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

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

1 голос
/ 09 августа 2018

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) В случае, еслиВы получаете ошибку ниже, вручную создайте каталог "hooks" в папке .git

protocol error: expected control record

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

d) Если scp не распознается окнами, укажите полный путь к scp

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

e) .git папка присутствует в вашем репозитории проектаскрытая папка

1 голос
/ 30 апреля 2018

Необходимо выполнить следующие 2 шага инструкции:

[Issue] 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 = ".git".Вам необходимо обновить имя пользователя и ссылку Gerrit.

1 голос
/ 22 июля 2015

Проверьте свой репозиторий Git перед совершением

gitrepo/.git/hooks/commit-msg

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

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

0 голосов
/ 29 октября 2018

в моей папке .git / hooks, некоторые примеры файлов отсутствовали.например, commit-msg, post-commit.sample, post-update.sample ... добавление этих файлов решило проблему отсутствия идентификатора изменения.

0 голосов
/ 27 февраля 2016

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

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

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

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

...