64 votes

Erreur de Gerrit lorsque les Change-Id sont manquants dans les messages de commit

J'ai créé une branche dans le dépôt distant et j'ai effectué quelques commits sur cette branche. Maintenant, je veux fusionner la branche distante avec le master distant.

Voici essentiellement mes opérations:

  1. checkout branch
  2. checkout master
  3. merge branch and fix merging errors
  4. commit
  5. push origin HEAD:refs/for/master

Mais je reçois des messages d'erreur à l'étape 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)

4 votes

Il suffit de faire comme suit dans git : gitdir=$(git rev-parse --git-dir); scp -p -P 29418 user@host:hooks/commit-msg ${gitdir}/hooks/ puis git commit --amend --no-edit.

0 votes

@Galley, je pense que c'est la solution la plus simple pour le problème mentionné ci-dessus. Je voulais confirmer avec SO à partir de ce que git suggère dans le terminal. Ça marche pour moi.

103voto

Rafał Rawicki Points 10069

Vérifiez si vos commits ont Change-Id: ... dans leurs descriptions. Chaque commit devrait les avoir.

Si non, utilisez git rebase -i pour reformuler les messages de commit et ajouter les Change-Ids appropriés (généralement il s'agit d'un SHA1 de la première version du commit examiné).

Pour l'avenir, vous devriez installer le crochet de commit, qui ajoute automatiquement le Change-Id requis.

Exécutez scp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/ dans le répertoire du dépôt ou téléchargez-les depuis http://your_gerrit_address/tools/hooks/commit-msg et copiez-les dans .git/hooks

Maintenant git commit --amend --no-edit insère la ligne.

31voto

vailaya shreesha Points 287

Essayez ceci :

git commit --amend

Ensuite, copiez et collez le Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a à la fin du fichier.

Enregistrez-le et poussez-le à nouveau !

2 votes

Cela fonctionne comme solution rapide, mais la réponse 'correcte' est fournie par @Rafa Rawicki

0 votes

Fonctionne comme un charme. Il suffisait d'ajouter le ChangeId : XXXXXXX sous le commentaire de validation. C'est bien plus facile que d'autres solutions et doit être voté comme la réponse.

7voto

Matt Cowell Points 79

Si vous avez besoin d'ajouter Change-Id à plusieurs commits, vous pouvez télécharger le hook depuis votre serveur Gerrit et exécuter ces commandes pour ajouter les Change-Id à tous les commits qui en ont besoin en une seule fois. L'exemple ci-dessous corrige tous les commits de votre branche actuelle qui n'ont pas encore été poussés vers la branche amont.

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

0 votes

Pouvez-vous expliquer comment exécuter ceci?

0 votes

Veuillez copier ce contenu dans un fichier et l'exécuter en tant que script shell.

0 votes

Cela ne fonctionne pas pour moi, cela dit que je n'ai pas de configuration en amont. Pourriez-vous expliquer ce que vous faites ici? De plus, readlink -f ne fonctionne pas sur Mac.

5voto

manojlds Points 96599

C'est parce que Gerrit est configuré pour exiger l'identifiant de changement dans les messages de commit.

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

Vous devez modifier les messages de chaque commit que vous poussez pour inclure l'identifiant de changement (en utilisant git filter-branch) et seulement après pousser.

0 votes

Je lance git commit --amend pour corriger le message du journal des commits: Voici les messages de journal actuels: commit 8152da05ce0235cb779620410474731868664296 Auteur: PRC Date: Thu Jan 12 17:24:33 2012 +0800 Fusionner ma branche avec master Change-Id: I70aee922f6310e4766eb15694deb2fb3579ed042 Mais je ne peux toujours pas pousser la branche vers master avec les mêmes erreurs.

2voto

Ivan Vučica Points 5418

Vous pourriez être un administrateur effectuant une poussée ponctuelle directement dans refs/changes/.

Par exemple, une fois qu'un commit sans Change-Id a atterri dans Subversion, vous le retirez de Subversion en utilisant git-svn, et vous aimeriez l'archiver en tant que jeu de correctifs Gerrit dans un changement Gerrit.

Si c'est le cas, vous pouvez accéder à la page des paramètres du projet (http://[installation-path]/#/admin/projects/[project-id]) et modifier temporairement la valeur "Requérir un Change-Id dans le message de commit" en False.

N'oubliez pas de le remettre ensuite à Hériter ou à True !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X