git - Error de Gerrit cuando falta el Id de cambio en los mensajes de confirmación
merge branch (11)
Configuré una rama en el repositorio remoto y realicé algunas confirmaciones en esa rama. Ahora quiero fusionar la rama remota con el maestro remoto.
Básicamente sigue son mis operaciones:
- caja registradora
- maestro de pago
- fusionar rama y corregir errores de fusión
- cometer
- origen de inserción HEAD: refs / for / master
Pero recibe mensajes de error en el 5º paso:
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)
Debe seguir las instrucciones a continuación de 2 pasos:
[Problema] remoto: Sugerencia: para insertar automáticamente Change-Id, instale el gancho:
1) gitdir=$(git rev-parse --git-dir);
2) scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg ${gitdir}/hooks/
normalmente $ gitdir = ".git". Necesita actualizar el nombre de usuario y el enlace de Gerrit.
Es porque Gerrit está configurado para requerir Change-Id en los mensajes de confirmación.
http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-missing-changeid.html
Tienes que cambiar los mensajes de cada confirmación que estás presionando para incluir el ID de cambio (usando git filter-branch
) y solo luego presionar.
Es posible que sea un administrador que realice una inserción única directamente en refs/changes/<change_number>
.
Por ejemplo, una vez que un commit sin Change-Id aterrizó en Subversion, lo extrae de Subversion usando git-svn, y le gustaría archivarlo como un parche de Gerrit en un cambio de Gerrit.
Si es así, puede ir a la página de configuración del proyecto ( http://[installation-path]/#/admin/projects/[project-id] ) y cambiar temporalmente el valor "Requerir ID de cambio en mensaje de confirmación" a Falso.
¡No olvides volver a cambiarlo a Heredar o Verdadero!
Esto también puede suceder si tienes esta restricción:
Por favor ingrese el mensaje de confirmación para sus cambios. Las líneas que comienzan con ''#'' se ignorarán y un mensaje vacío abortará la confirmación.
y le gusto: escriba un mensaje de confirmación que comience por "#" .....
Tuve el mismo error, pero ya tenía commit-msg
e hice la rebase
y todo. Error muy tonto sin embargo: D
Prueba esto:
git commit --amend
Luego, copie y pegue Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a
al final del archivo.
Guárdalo y empújalo de nuevo!
Recibí este mensaje de error también.
y lo que me hace pensar que es útil dar una respuesta aquí es que la respuesta de @ Rafał Rawicki es una buena solución en algunos casos pero no para todas las circunstancias. ejemplo que conocí:
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"
solución:
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
Resolvimos este problema esta mañana al volver a clonar el repositorio y volver a aplicar los cambios. Esta es la forma más sencilla de volver a sincronizar su copia local con Gerrit. Como siempre, creamos una copia de seguridad primero.
Aunque hay una serie de otras soluciones tremendamente complicadas, a menudo es ventajoso adoptar un enfoque simple para evitar empeorar las cosas.
Si necesita agregar Change-Id a múltiples commits, puede descargar el gancho desde su servidor de Gerrit y ejecutar estos comandos para agregar los Change-Ids a todas las confirmaciones que los necesitan a la vez. El siguiente ejemplo corrige todos los commits en su rama actual que aún no se han enviado a la rama 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
Verifica si tus commits tienen Change-Id: ...
en sus descripciones. Cada compromiso debería tenerlos.
Si no, use git rebase -i
para git rebase -i
a git rebase -i
los mensajes de confirmación y agregar Change-Ids apropiados (generalmente esto es un SHA1 de la primera versión de la confirmación revisada).
Para el futuro, debe instalar commit hook, que agrega automáticamente el Change-Id requerido.
Ejecute scp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/
en el directorio del repositorio o descárguelos de http://your_gerrit_address/tools/hooks/commit-msg
y cópielos en .git / hooks
Verifica tu repositorio git antes de comprometerte
gitrepo/.git/hooks/commit-msg
si este archivo no está presente en esa ubicación, entonces obtendrá este error "falta ID de cambio en el mensaje de confirmación".
Para resolver esto solo copie y pegue el gancho commit en la carpeta .git.
1) gitdir=$(git rev-parse --git-dir);
2) scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg ${gitdir}/hooks/
a) No sé cómo ejecutar el paso 1 en Windows, así que me salté y utilicé la ruta codificada en el step 2 scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg .git/hooks/
b) En caso de que aparezca el error a continuación, cree manualmente el directorio "hooks" en la carpeta .git
protocol error: expected control record
c) si tienes un submódulo, digamos "XX", entonces también necesitas repetir el paso 2 y esta vez reemplaza $ {gitdir} con esa ruta de submódulos
d) En caso de que scp no sea reconocido por Windows, brinde la ruta completa de scp
"C:/Program Files/Git/usr/bin/scp.exe"
e) La carpeta .git está presente en el repositorio del proyecto y su carpeta oculta