Erreur Gerrit lorsque les messages de commit de Change-Id sont absents

j'ai créer une succursale dans le dépôt distant et fait quelques révisions sur cette branche. Maintenant, je veux fusionner la branche distante avec le maître distant.

suit essentiellement mes opérations:

  1. checkout branch
  2. checkout master
  3. fusionner la branche et corriger les erreurs de fusion
  4. valider
  5. push origin TÊTE:refs/pour/master

Mais obtenez des messages d'erreur sur la 5e étape:

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)
35

11 réponses

vérifiez si vos commits ont Change-Id: ... dans leurs descriptions. Chaque livraison doit avoir.

si non, utilisez git rebase -i pour reformuler les messages de propagation et ajouter les identifiants de modification appropriés (habituellement C'est un SHA1 de la première version de la propagation revue).

pour l'avenir, vous devriez installer commit hook, qui ajoute automatiquement le Change-Id requis.

Exécuter scp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/ dans le répertoire de dépôt ou de les télécharger à partir de http://your_gerrit_address/tools/hooks/commit-msg copie à .git / hooks

61
répondu Rafał Rawicki 2012-01-13 11:25:43

essaye ceci:

git commit --amend

puis copier et coller le Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a à la fin du fichier.

l'Enregistrer et de le pousser encore!

24
répondu vailaya shreesha 2017-09-05 15:07:16

si vous avez besoin d'ajouter un changement-Id à plusieurs propagations, vous pouvez télécharger le crochet depuis votre serveur Gerrit et exécuter ces commandes pour ajouter les changements-ID à toutes les propagations qui en ont besoin à la fois. L'exemple ci-dessous corrige toutes les propagations sur votre branche courante qui n'ont pas encore été poussées 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
7
répondu Matt Cowell 2015-10-01 22:17:45

C'est parce que Gerrit est configuré pour requérir le Change-Id dans les messages de propagation.

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

vous devez changer les messages de chaque propagation que vous poussez pour inclure le change id (en utilisant git filter-branch ) et ensuite pousser.

4
répondu manojlds 2012-01-13 04:30:51

Vous êtes peut-être un administrateur qui fait une pression unique directement dans refs/changes/<change_number>.

par exemple, une fois qu'une propagation sans changement-Id atterrit dans Subversion, vous la retirez de Subversion en utilisant git-svn, et vous aimeriez l'archiver comme patchset Gerrit dans un changement Gerrit.

Si oui, vous pouvez aller dans les paramètres de projet page (http://[installation-path]/#/admin/projets/[project-id]) et changer temporairement la valeur "Require Change-Id in commit message" à False.

N'oubliez pas de le changer ensuite pour hériter ou vrai!

2
répondu Ivan Vučica 2015-07-13 01:16:17

Vérifier votre repo git avant de commettre

gitrepo/.git/hooks/commit-msg

si ce fichier n'est pas présent à cet endroit, alors vous obtiendrez cette erreur "changement manquant-Id dans le message de propagation" .

pour résoudre cela il suffit de copier coller le crochet de propagation .dossier git.

1
répondu Mahi 2015-07-22 11:49:52

j'ai eu ce message d'erreur trop.

et ce qui me fait penser qu'il est utile de répondre ici, c'est que la réponse de @Rafał Rawicki est une bonne solution dans certains cas mais pas dans toutes les circonstances. exemple que j'ai rencontré:

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"

solution:

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
0
répondu kagb 2013-12-04 08:31:29

nous avons résolu ce problème ce matin en re-clonant le dépôt et en appliquant de nouveaux changements. C'est la façon la plus simple de re-synchroniser votre copie locale avec Gerrit. Comme toujours, nous avons d'abord créé une sauvegarde.

bien qu'il existe un certain nombre d'autres solutions extrêmement compliquées, il est souvent avantageux d'adopter une approche simple pour éviter d'aggraver les choses.

0
répondu Brad Hein 2014-09-09 14:14:16

vous devez suivre les instructions ci-dessous:

[Question] distance: Astuce: Pour insérer automatiquement le Changement de l'Id, installer le crochet:

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

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

normalement $gitdir =".Git." Vous devez mettre à jour le nom d'utilisateur et le lien Gerrit.

0
répondu Kashan 2018-04-30 13:26:09

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

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

a) Je ne sais pas comment exécuter l'étape 1 dans windows donc je l'ai sautée et j'ai utilisé le chemin codé en dur dans step 2 scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg .git/hooks/

b) dans le cas où vous obtenez au-dessous de l'erreur, créer manuellement "hooks" le répertoire .dossier git

protocol error: expected control record

c) si vous avez submodule disons "XX" alors vous devez répéter l'étape 2 là aussi et cette fois remplacer ${gitdir} avec ce chemin de submodules

d) dans le cas où scp n'est pas reconnu par windows donner le chemin complet de scp

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

e).git dossier est présent dans votre projet repo et c'est dossier caché

0
répondu Ravi Yadav 2018-08-09 04:29:21

cela peut aussi se produire si vous avez cette restriction:

veuillez entrer le message de propagation de vos modifications. Les lignes commençant par " # " sont ignorées et un message vide abandonne le commettre.

et vous faites comme moi: écrivez un message de commit à partir de"#".....

j'ai eu la même erreur, mais j'ai déjà eu le commit-msg et a rebase et tout et tout. Très stupide erreur cependant: D

-1
répondu ladybug23 2016-02-27 05:02:59