git merge branch master gerrit

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:

  1. caja registradora
  2. maestro de pago
  3. fusionar rama y corregir errores de fusión
  4. cometer
  5. 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 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