默认推送的自定义操作

时间:2012-12-20 00:15:22

标签: git gerrit

我的公司使用Gerrit Code Review代表Git。我每次想要推动代码更改时都会使用自定义咒语:

git push origin HEAD:refs/for/my-branch-name

除了“my-branch-name”之外,这是逐字的。 refs/for/语法对我来说似乎很疯狂,并不是我之前在Git中看到过的。

如何配置我的仓库以便git push单独执行与上述相同的操作?

3 个答案:

答案 0 :(得分:2)

这种语法并不疯狂,它只是完整的git push语法。当你单独git push时,它确实是:

git push origin current-branch:refs/heads/current-branch

您可能正在使用gerrit进行代码审查,因此您不想直接推送到特定分支,而是希望让gerrit了解更改 - gerrit为此目的使用refs/for区域。

较新版本的gerrit使用refs/publishrefs/drafts,因此您也可能会看到这些版本。

如果您想要更方便的东西,可以轻松制作别名并将它们添加到您的git配置中。看看这个问题:git alias for HEAD:refs/for/master

答案 1 :(得分:2)

您可以通过键入

来更新遥控器的push ref-spec
git config remote.origin.push HEAD:refs/for/my-branch-name

我创建了一个git post-checkout hook,确保所有分支(和master)都配置为与gerrit一起使用。我认为它有效,但你的工作流程可能与我的不同,所以在使用之前阅读脚本并理解它(并不难)。

答案 2 :(得分:0)

refs/for/....是一个“神奇的”参考,Gerrit用它来触发和跟踪特定分支的代码评论。这在http://gerrit-documentation.googlecode.com/svn/Documentation/2.5.1/user-upload.html

中有记录

您需要推送到此引用,以便Gerrit可以接收您的更改并开始代码审查过程。

如果您刚刚git push origin master,那么它将绕过Gerrit,因为您的提交已经在主分支中。 Gerrit的重点是确保您的代码在进入master(或其他)之前进行审核。