回答:
Gerritのドキュメント、特に「プッシュ変更」セクションでは、「refs/for/'branch'
Gitクライアントツールを使用した魔法のリファレンス」にプッシュすることが説明されています。
次の画像は、Intro to Gerritから取得したものです。Gerritにプッシュすると、を実行しますgit push gerrit HEAD:refs/for/<BRANCH>
。これにより、変更がステージング領域にプッシュされます(図では、「保留中の変更」)。Gerritには実際にはと呼ばれるブランチはありません<BRANCH>
。それはgitクライアントにあります。
内部的には、Gerritには、GitおよびSSHスタック用の独自の実装があります。これにより、「魔法の」refs/for/<BRANCH>
参照を提供できます。
これらの名前空間のいずれかに参照を作成するためのプッシュ要求が受信されると、Gerritは独自のロジックを実行してデータベースを更新し、操作の結果についてクライアントに嘘をつきます。成功した結果により、クライアントはGerritが参照を作成したと考えますが、実際にはGerritは参照をまったく作成していません。[ リンク-Gerrit、「Gritty Details」 ]。
パッチが成功すると(つまり、パッチがGerritにプッシュされ、[「保留中の変更」のステージング領域に入れて]確認され、レビューに合格した)、Gerritは「保留中の変更」から「 Authoritative Repository」refs/for/<BRANCH>
。プッシュするときに行った魔法に基づいて、プッシュするブランチを計算します。このようにして、レビューに成功したパッチは、の正しいブランチから直接プルできますAuthoritative Repository
。
git pushコマンドを完全に指定する必要がないようにするには、代わりにgit構成ファイルを変更します。
[remote "gerrit"]
url = https://your.gerrit.repo:44444/repo
fetch = +refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/for/master
今、あなたは簡単にできます:
git fetch gerrit
git push gerrit
これはGerritによると
remote.origin.push
毎回入力/貼り付けする代わりに、これをハードコード化しておく方がずっといいです!
git fetch
とgit push
@DavidDoriaは、上記の設定を持ちます。