J'ai mis en place une branche dans le référentiel distant et effectué quelques commits sur cette branche ..__ Je souhaite maintenant fusionner la branche distante avec le maître distant.
Voici en gros mes opérations:
Mais recevez des messages d'erreur à la 5ème étape:
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)
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 validation et ajouter les ID de modification appropriés (généralement, il s'agit d'un SHA1 de la première version de la validation examinée).
Pour l’avenir, vous devez installer le crochet de validation, qui ajoute automatiquement l’ID de modification requis.
Exécutez scp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/
dans le répertoire du référentiel .__ ou téléchargez-les à partir de http://your_gerrit_address/tools/hooks/commit-msg
et copiez-les dans .git/hooks
Essaye ça:
git commit --amend
Ensuite, copiez et collez le Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a
à la fin du fichier.
Enregistrez-le et appuyez à nouveau!
Si vous devez ajouter Change-Id à plusieurs commits, vous pouvez télécharger le raccord depuis votre serveur Gerrit et exécuter ces commandes pour ajouter les ID de changement à tous les commits qui en ont besoin en même temps. L'exemple ci-dessous corrige tous les commits de votre branche actuelle qui n'ont pas encore été poussés vers la branche en 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 exiger Change-Id dans les messages de validation.
http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-missing-changeid.html
Vous devez modifier les messages de chaque validation que vous appuyez pour inclure l'identificateur de modification (à l'aide de git filter-branch
), puis uniquement Push.
Vous êtes peut-être un administrateur qui effectue un transfert ponctuel directement dans refs/changes/<change_number>
.
Par exemple, une fois qu'un commit sans Change-ID atterrit dans Subversion, vous le retirez à l'aide de git-svn et vous souhaitez l'archiver en tant que patch de Gerrit dans un changement de Gerrit.
Si tel est le cas, vous pouvez accéder à la page des paramètres du projet ( http: // [chemin d'installation]/#/admin/projects/[id-projet] ) et modifier temporairement la valeur "Require un ID de modification dans le message de validation" Faux.
N'oubliez pas de le changer ensuite en Héritage ou Vrai!
Vérifiez votre dépôt avant de vous engager
gitrepo/.git/hooks/commit-msg
si ce fichier n'est pas présent à cet emplacement, vous obtiendrez alors l'erreur "ID de modification manquant dans le message de validation".
Pour résoudre ce problème, il suffit de coller le hook de validation dans le dossier .git.
Vous devez suivre les instructions ci-dessous en 2 étapes:
[Problème] remote: Astuce: pour insérer automatiquement Change-Id, installez le hook:
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.
J'ai aussi reçu ce message d'erreur.
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 référentiel et en appliquant de nouveau les modifications. C'est le moyen le plus simple de resynchroniser 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 ne pas aggraver les choses.
sous mon dossier .git/hooks, des exemples de fichiers étaient manquants. comme commit-msg, post-commit.sample, post-update.sample ... l'ajout de ces fichiers a résolu le problème manquant de mon identificateur de changement.