我的公司使用Gerrit Code Review代表Git。我每次想要推动代码更改时都会使用自定义咒语:
git push origin HEAD:refs/for/my-branch-name
除了“my-branch-name”之外,这是逐字的。 refs/for/
语法对我来说似乎很疯狂,并不是我之前在Git中看到过的。
如何配置我的仓库以便git push
单独执行与上述相同的操作?
答案 0 :(得分:2)
这种语法并不疯狂,它只是完整的git push
语法。当你单独git push
时,它确实是:
git push origin current-branch:refs/heads/current-branch
您可能正在使用gerrit进行代码审查,因此您不想直接推送到特定分支,而是希望让gerrit了解更改 - gerrit为此目的使用refs/for
区域。
较新版本的gerrit使用refs/publish
和refs/drafts
,因此您也可能会看到这些版本。
如果您想要更方便的东西,可以轻松制作别名并将它们添加到您的git配置中。看看这个问题:git alias for HEAD:refs/for/master
答案 1 :(得分:2)
您可以通过键入
来更新遥控器的push ref-specgit 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
(或其他)之前进行审核。