web-dev-qa-db-ja.com

コミットメッセージにChange-Idがない場合のGerritエラー

リモートリポジトリにブランチを設定し、そのブランチでいくつかのコミットを行いました。ここで、リモートブランチをリモートマスターにマージします。

基本的に私の操作は次のとおりです。

  1. チェックアウト支店
  2. チェックアウトマスター
  3. ブランチをマージしてマージエラーを修正
  4. コミット
  5. Origin HEAD:refs/for/masterをプッシュ

ただし、5番目のステップでエラーメッセージを取得します。

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

コミットの説明にChange-Id: ...が含まれているかどうかを確認してください。すべてのコミットにはそれらが必要です。

いいえの場合、git rebase -iを使用してコミットメッセージを書き換え、適切な変更IDを追加します(通常、これはレビュー済みコミットの最初のバージョンのSHA1です)。

将来的には、必要なChange-Idを自動的に追加するコミットフックをインストールする必要があります。

リポジトリディレクトリでscp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/を実行するか、http://your_gerrit_address/tools/hooks/commit-msgからダウンロードして.git/hooksにコピーします

76
Rafał Rawicki

これを試して:

git commit --amend

次に、Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699aをファイルの最後にコピーして貼り付けます。

保存してもう一度プッシュしてください!

26

Change-Idを複数のコミットに追加する必要がある場合は、Gerritサーバーからフックをダウンロードし、これらのコマンドを実行して、Change-Idを一度に必要とするすべてのコミットに追加できます。以下の例は、現在のブランチで、まだアップストリームブランチにプッシュされていないすべてのコミットを修正します。

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

これは、コミットメッセージでChange-Idを要求するようにGerritが構成されているためです。

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

プッシュするすべてのコミットのメッセージを変更して、変更ID(git filter-branchを使用)を含めてからプッシュするようにする必要があります。

5
manojlds

管理者がrefs/changes/<change_number>に1回限りのプッシュを直接行う場合があります。

たとえば、Change-IdのないコミットがSubversionに到達したら、git-svnを使用してSubversionからプルアウトし、GerritパッチセットとしてGerritの変更にアーカイブします。

その場合は、プロジェクト設定ページ( http:// [installation-path] /#/ admin/projects/[project-id] )に移動し、「コミット時に変更IDが必要」を一時的に変更できます。メッセージ」の値をFalseにします。

その後、継承またはTrueに戻すことを忘れないでください!

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)Windowsでステップ1を実行する方法がわからないため、スキップしてstep 2 scp -p -P 29418 <username>@gerrit.xyz.se:hooks/commit-msg .git/hooks/でハードコードされたパスを使用しました

b)エラーが発生する場合は、.gitフォルダーに「hooks」ディレクトリを手動で作成します

protocol error: expected control record

c)サブモジュールがある場合、「XX」と言うと、ステップ2も繰り返す必要があり、今回は$ {gitdir}をそのサブモジュールパスに置き換えます

d)Windowsでscpが認識されない場合は、scpのフルパスを指定します

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

e).gitフォルダーがプロジェクトリポジトリにあり、隠しフォルダーです

1
Ravi Yadav

コミットする前にgitリポジトリを確認してください

gitrepo/.git/hooks/commit-msg

このファイルがその場所に存在しない場合、「コミットメッセージにChange-Idが見つかりません」というエラーが表示されます。

この問題を解決するには、コミットフックをコピーして.gitフォルダーに貼り付けます。

1
Mahi

以下の2つのステップの指示に従う必要があります。

[Issue] remote:ヒント:Change-Idを自動的に挿入するには、フックをインストールします。

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

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

通常$ gitdir = ".git"。ユーザー名とGerritリンクを更新する必要があります。

1
Kashan

私もこのエラーメッセージを受け取りました。

ここで答えを出すことが有益だと思うのは、@RafałRawickiからの答えがすべての状況ではなく、場合によっては良い解決策であるということです。私が会った例:

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"

解決:

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

今朝、リポジトリのクローンを再作成し、変更を再適用することでこの問題を解決しました。これは、ローカルコピーをGerritと再同期する最も簡単な方法です。いつものように、最初にバックアップを作成しました。

他にも非常に複雑な解決策は数​​多くありますが、事態を悪化させないために簡単なアプローチをとることがしばしば有利です。

0
Brad Hein

.git/hooksフォルダーの下に、いくつかのサンプルファイルがありませんでした。 commit-msg、post-commit.sample、post-update.sampleのように...これらのファイルを追加すると、変更IDの欠落問題が解決しました。

0
schin chan