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:
- checkout branch
- checkout master
- fusionner la branche et corriger les erreurs de fusion
- valider
- 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)
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
essaye ceci:
git commit --amend
puis copier et coller le Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a
à la fin du fichier.
l'Enregistrer et de le pousser encore!
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
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.
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!
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.
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
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.
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.
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é
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