我的公司使用Gerrit Code Review for Git。每次我想推送代码更改时,我都会使用自定义咒语:
git push origin HEAD:refs/for/my-branch-name
除了“我的分支名称”之外,就是逐字记录。语法对我来说似乎很疯狂,这refs/for/
不是我以前在 Git 中见过的东西。
如何配置我的仓库,以便git push
单独与上述相同?
我的公司使用Gerrit Code Review for Git。每次我想推送代码更改时,我都会使用自定义咒语:
git push origin HEAD:refs/for/my-branch-name
除了“我的分支名称”之外,就是逐字记录。语法对我来说似乎很疯狂,这refs/for/
不是我以前在 Git 中见过的东西。
如何配置我的仓库,以便git push
单独与上述相同?
这种语法并不疯狂,它只是完整的git push
语法。当你自己做时git push
,它真的是:
git push origin current-branch:refs/heads/current-branch
您可能正在使用 gerrit 进行代码审查,因此您不想直接推送到特定分支,而是想让 gerrit 知道更改 - gerrit 使用该refs/for
区域来实现此目的。
较新版本的 gerrit 使用refs/publish
and refs/drafts
,因此您也可能会看到这些。
如果你想要更方便的东西,你可以轻松地创建别名并将它们添加到你的 git 配置中。看看这个问题:git alias for HEAD:refs/for/master
您可以通过键入来更新遥控器的推送参考规范
git config remote.origin.push HEAD:refs/for/my-branch-name
我创建了一个git post-checkout 挂钩,确保所有分支(和主分支)都配置为与 gerrit 一起使用。我认为它有效,但您的工作流程可能与我的不同,因此请在使用之前阅读脚本并理解它(这并不难)。
refs/for/....
是 Gerrit 用来触发和跟踪特定分支的代码审查的“神奇”参考。这记录在http://gerrit-documentation.googlecode.com/svn/Documentation/2.5.1/user-upload.html
您需要推送到此 ref 以便 Gerrit 可以获取您的更改并开始代码审查过程。
如果您刚刚这样做,git push origin master
那么它将绕过 Gerrit,因为您的提交已经在 master 分支中。Gerrit 的重点是确保您的代码在进入master
(或其他)之前经过审查。