2017-02-02 9 views
0

私は1つのプロジェクトを作成するgitリポジトリを持っています。すでにうまく機能している既存のプロジェクトがいくつかあります。Gerritはコードをプッシュすることを許可していません。

私はこの新しいプロジェクトのコードをプッシュしたい、私はコミットにgerritの変更IDを追加しましたが、プッシュしようとすると次のエラーが表示されます。 私はgitのクライアントとして(gitの日食)egitを使用しています

missing Change-Id in commit message footer 
Processing changes: refs: 1 
Processing changes: refs: 1, done  
ERROR: missing Change-Id in commit message footer 

Hint: To automatically insert Change-Id, install the hook: 
    gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/ 
And then amend the commit: 
    git commit --amend 

私はヘリットのための既存のGitリポジトリに新しいプロジェクトを追加したときに行われる任意の構成はありますか?

答えて

1

私はマルセロの答えにいくつかの追加の発言をします。

コミット履歴がA-B-C-Dであるとします。 CとDはあなたの新しく作られたコミットです。 CまたはDのいずれかにchange-idがない場合、プッシュはブロックされます。この場合、別のプッシュの前にCとDのコミットメッセージを書き換える必要があります(どちらもどちらもchange-idを持っていないとします)。

エラーログに示すようにフックを最初にインストールします。

gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/ 

コミットを確認するには、git logを実行してください。

コミットメッセージを書き換えます。

git reset B --hard 
git cherry-pick C 
git commit --amend 
#simply save and quit 
git cherry-pick D 
git commit --amend 
#simply save and quit. 

既存の変更-idが存在する場合、あなたは、全体の変更-IDの行を削除して保存して終了できようにコミット-MSGは新しい変更-IDを生成します。場合によってはそれが必要な場合もあります。

すべてのクローンに対して自動的にフックcommit-msgをデプロイするには、このcommit-msgをGitのTEMPLATE DIRECTORYに追加します。このコピーの後に、コミットメッセージをコピーする別の方法として、git initを既存のレポで実行することができます。

あなたはGerritを使用しているので、もっと言いたいことがあります。マージコミットはフックcommit-msgを引き起こさないので、フックがデプロイされていてもローカル真マージはchange-idを持ちません。これもプッシュをブロックします。したがって、プッシュの前にローカルブランチを同期および更新するためにgit pull origin <branch>を使用しないでください。 git pull origin --rebase <branch>またはgit fetch origin <branch> && git rebase FETCH_HEADのいずれかが優れています。これはローカルではマージコミットを行いません。

2

Gerritに複数のコミットをプッシュしようとしているようですが、最後のものだけがChange-Idを持っているようです。コミットをGerritにプッシュすると、まだGerritに存在しないすべての親コミットもプッシュされます。 Gitログを見て、プッシュされるすべてのコミットを確認してください。

関連する問題