web-dev-qa-db-fra.com

Erreur Gerrit lorsque l'identificateur de modification dans les messages de validation est manquant

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:

  1. branche de caisse
  2. maître de caisse
  3. fusionner la branche et corriger les erreurs de fusion
  4. commettre
  5. Push Origin HEAD: refs/pour/master

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)
38
Pan Ruochen

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

66
Rafał Rawicki

Essaye ça:

git commit --amend

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

Enregistrez-le et appuyez à nouveau!

24
vailaya shreesha

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
7
Matt Cowell

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.

4
manojlds

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!

2
Ivan Vučica

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.

1
Mahi

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.

0
Kashan

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
0
kagb

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. 

0
Brad Hein

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.

0
schin chan