将更改推送到 Gerrit 需要相当深奥的命令
git push origin HEAD:refs/for/branchname
我们已经为此编写了脚本,但我正在寻找一种本机执行此操作的方法。借助 git 的强大配置,我似乎可以预配置其中的大部分内容[1],这样就git push
足够了……几乎。我被困在参考规范上remote.<name>.push
。
我已经可以创建一个跟踪主题分支,以便git pull
(没有其他参数)将来自上游远程的更改拉到我的主题分支中。但是对于 Gerrit,push 和 fetch refspecs 是不一样的:一个从 获取(合并)refs/heads/trackbranch
,但是一个推送到refs/for/trackbranch
[2]
我可以在 中配置一个push
refspec remote.<name>.push
,但是语法非常基本:如果我把
push = refs/heads/*:refs/for/*
然后这将尝试将我的t-foo
主题分支推送到refs/for/t-foo
. 但是 git 有t-foo
正在跟踪的信息trackbranch
。我可以定义一个 refspec 以便 git 自动尝试将任何内容推t-foo
送到它的 refspecrefs/for/trackbranch
吗?
我们目前正在使用脚本来执行此操作,我想我可以为每个主题分支定义一个推送 refspec(可能通过更多脚本编写)。我希望有一种本地 git 方式来执行此操作,这样我们就不需要为我们的团队依赖更多自定义的内部脚本。
git checkout origin/upstream_branch -b topic_branch
[1] 通过在现有分支中或在现有分支中定义跟踪分支git branch --set-upstream-to origin/upstream_branch
[2] 推动refs/for/*
创建一个变更集以供审查。有了适当的权限,人们可以推动refs/heads/*
绕过审查,但这否定了 Gerrit 的大部分观点。