HEAD的git别名:refs/for/master

Mac*_*rse 25 git gerrit

我正在配置Gerrit,我想避免写:

git push gerrit HEAD:refs/for/master
Run Code Online (Sandbox Code Playgroud)

我想写:

git push review
Run Code Online (Sandbox Code Playgroud)

我确信它可以修改,.git/config但我不能使它工作.

小智 25

我设置了两种不同的推送类型,审查和noreview:

评论:

git config remote.review.pushurl ssh://<GERRIT_HOST>:29418/<PROJECT_PATH>.git
git config remote.review.push refs/heads/*:refs/for/*
git push review # this will push your current branch up for review
Run Code Online (Sandbox Code Playgroud)

绕过审查:

git config remote.noreview.pushurl ssh://<GERRIT_HOST>:29418/<PROJECT_PATH>.git
git config remote.noreview.push refs/heads/*
git push noreview # this will push your current branch up, bypassing review
Run Code Online (Sandbox Code Playgroud)

请注意,项目所有者/ Gerrit管理员需要进行一些Gerrit项目更改,以便绕过审核.我认为需要将"推送"权限添加到refs/*的项目中(除非您具体了解哪些分支允许绕过审核).但是,对于评论,已经设置了发布所需的权限.换句话说,如果你的

git push gerrit HEAD:refs/for/master
Run Code Online (Sandbox Code Playgroud)

工作,比上面的"审查"部分也应该工作,而不改变任何其他.

  • 我最好使用`git config remote.review.push HEAD:refs/for/master`我认为对master的评论更频繁. (2认同)

小智 5

你最好做的就是在你的别名中添​​加一个 Git scriptlet。像这样的东西基于“上游”分支工作,尽管我想稍微清理一下:

〜/.gitconfig

[alias]
  pub = "!f() { git push -u ${1:-origin} HEAD:`git config branch.$(git name-rev --name-only HEAD).merge | sed -e 's@refs/heads/@refs/for/@'`; }; f"
Run Code Online (Sandbox Code Playgroud)

这样,您只需输入:

git pub
Run Code Online (Sandbox Code Playgroud)

就像你输入的一样:

git push -u origin HEAD:refs/for/master
Run Code Online (Sandbox Code Playgroud)

或者

git push -u origin HEAD:refs/for/myremote-branch
Run Code Online (Sandbox Code Playgroud)

唯一的要求是它仅与 Windows 上的 Git Bash shell 或众多 Linux shell 之一兼容。