it-swarm.com.de

Gerrit-Fehler, wenn Change-Id in Commit-Nachrichten fehlt

Ich habe im Remote-Repository eine Verzweigung eingerichtet und in dieser Verzweigung einige Commits vorgenommen. Nun möchte ich die entfernte Verzweigung mit dem entfernten Master zusammenführen.

Grundsätzlich sind meine Operationen:

  1. checkout-Zweig
  2. checkout-Master
  3. zweig zusammenführen und Zusammenführungsfehler beheben
  4. verpflichten
  5. Drücken Sie Origin HEAD: refs/for/master

Bekommen Sie aber Fehlermeldungen im fünften Schritt:

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

Prüfen Sie, ob Ihre Commits Change-Id: ... in ihren Beschreibungen enthalten. Jedes Commit sollte sie haben.

Falls nein, verwenden Sie git rebase -i, um die Commit-Nachrichten umzuformulieren und die richtigen Change-Ids hinzuzufügen (normalerweise ist dies ein SHA1 der ersten Version des überprüften Commits).

Für die Zukunft sollten Sie den commit-Hook installieren, der automatisch die erforderliche Change-Id hinzufügt.

Führen Sie scp -p -P 29418 [email protected]_gerrit_address:hooks/commit-msg .git/hooks/ im Repository-Verzeichnis .__ aus oder laden Sie sie von http://your_gerrit_address/tools/hooks/commit-msg herunter und kopieren Sie sie nach .git/hooks

66
Rafał Rawicki

Versuche dies:

git commit --amend

Kopieren Sie dann den Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a am Ende der Datei und fügen Sie ihn ein.

Speichern Sie es und drücken Sie es erneut!

24

Wenn Sie Change-Id zu mehreren Commits hinzufügen müssen, können Sie den Hook von Ihrem Gerrit-Server herunterladen und diese Befehle ausführen, um die Change-Ids zu allen Commits hinzuzufügen, die sie gleichzeitig benötigen. Das folgende Beispiel behebt alle Commits in Ihrem aktuellen Zweig, die noch nicht in den Upstream-Zweig übertragen wurden.

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

Dies liegt daran, dass Gerrit so konfiguriert ist, dass in den Festschreibungsnachrichten eine Änderungs-ID erforderlich ist.

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

Sie müssen die Nachrichten jedes Commits ändern, das Sie drücken, um die Änderungs-ID (mit git filter-branch) einzuschließen, und erst dann Push.

4
manojlds

Sie könnten ein Administrator sein, der einen einmaligen Push direkt in refs/changes/<change_number> durchführt.

Wenn zum Beispiel ein Commit ohne Change-Id in Subversion gelandet ist, ziehen Sie es mit git-svn aus Subversion und möchten es als Gerrit-Patchset in einer Gerrit-Änderung archivieren. 

In diesem Fall können Sie zur Seite mit den Projekteinstellungen wechseln ( http: // [Installationspfad]/#/admin/projects/[Projekt-ID] ) und den Wert "Erforderliche Änderungs-ID in Commit-Nachricht" vorübergehend ändern zu falsch. 

Vergessen Sie nicht, es später wieder in Inherit oder True zu ändern!

2
Ivan Vučica

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

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

a) Ich kann Schritt 1 in Windows nicht ausführen, habe ihn also übersprungen und den fest codierten Pfad in step 2 scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg .git/hooks/ verwendet.

b) Falls der folgende Fehler auftritt, erstellen Sie manuell ein "Hooks" -Verzeichnis im .git-Ordner

protocol error: expected control record

c) Wenn Sie ein Submodul haben, sagen wir "XX", dann müssen Sie dort auch Schritt 2 wiederholen und dieses Mal $ {gitdir} durch diesen Submodulpfad ersetzen

d) Falls scp von Windows nicht erkannt wird, geben Sie den vollständigen Pfad von scp an

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

e) .git Ordner ist in Ihrem Projekt-Repo vorhanden und es ist versteckter Ordner

1
Ravi Yadav

Überprüfen Sie Ihr Git-Repo, bevor Sie ein Commit ausführen 

gitrepo/.git/hooks/commit-msg

wenn diese Datei an diesem Ort nicht vorhanden ist, wird die Fehlermeldung "Fehlende Änderungs-ID in Festschreibungsnachricht" angezeigt.

Um dies zu lösen, kopieren Sie einfach den Commit-Hook im .git-Ordner.

1
Mahi

Sie müssen die folgenden 2 Schritte befolgen:

[Problem] remote: Hinweis: Um die Change-ID automatisch einzufügen, installieren Sie den Hook:

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

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

normalerweise $ gitdir = ".git". Sie müssen den Benutzernamen und den Gerrit-Link aktualisieren.

1
Kashan

Ich habe auch diese Fehlermeldung erhalten.

ich denke, es ist sinnvoll, hier eine Antwort zu geben: Die Antwort von @ Rafał Rawicki ist in manchen Fällen eine gute Lösung, aber nicht für alle Fälle.

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"

lösung:

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

Wir haben dieses Problem heute Morgen gelöst, indem wir das Repository erneut geklont und die Änderungen erneut angewendet haben. Dies ist der einfachste Weg, Ihre lokale Kopie mit Gerrit zu synchronisieren. Wie immer haben wir zuerst ein Backup erstellt. 

Obwohl es eine Reihe anderer äußerst komplizierter Lösungen gibt, ist es oft von Vorteil, einen einfachen Ansatz zu wählen, um zu vermeiden, dass sich die Dinge verschlimmern. 

0
Brad Hein

in meinem .git/hooks-Ordner fehlten einige Beispieldateien. wie commit-msg, post-commit.sample, post-update.sample ... Durch das Hinzufügen dieser Dateien wurde das Problem mit der Änderungs-ID behoben.

0
schin chan