5

将更改推送到 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]

我可以在 中配置一个pushrefspec 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 的大部分观点。

4

2 回答 2

2

出于某种原因:-) 我继续尝试编写一个脚本来设置 git config 条目,然后发现似乎没有办法直接获得所需的结果。

作为替代方案,我编写了一个推送到“gerrit 审查名称”的脚本(注意:我实际上并没有使用过 gerrit,所以这基本上未经测试,尽管我已经使用该--dry-run选项运行它并且看起来它做正确的事——但我希望你可能想修改它)。当然,这可能在功能上与您自己的脚本相同。

无论如何,您可以拥有一个全局或系统范围的别名,git config alias.review或者其他运行脚本的别名,这样您就可以说git reviewor git review branch。别名只是review = !sh /path/to/script(此时参数将自动传递)。

我把脚本放在这里:http ://web.torek.net/torek/git/gerrit-review.sh.txt (.txt扩展名只是为了让浏览器默认查看它,而不是默认下载它)。

于 2014-02-22T12:18:33.873 回答
1

你看过 git-review 插件吗?它应该很满意!

https://pypi.python.org/pypi/git-review

于 2014-02-21T22:57:11.263 回答