25

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

git push gerrit HEAD:refs/for/master

我想写:

git push review

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

4

8 回答 8

26

我设置了两种不同的推送类型,review 和 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

绕过审查:

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

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

git push gerrit HEAD:refs/for/master

正在工作,而不是上面的“审查”部分应该也可以正常工作,而无需更改任何其他内容。

于 2012-01-02T16:50:52.587 回答
4

为什么不创建 bash 别名?

alias review="git push gerrit HEAD:refs/for/master"

现在您只需键入:

review

如果您想在多个gerrit 分支上工作,请查看我的 bash 助手:https ://github.com/tomwys/gerrit-bash-commands

于 2011-12-05T22:11:17.257 回答
4

你最好做的是在你的别名中使用 Git 脚本。像这样的东西基于“上游”分支,虽然我还是想清理一下:

~/.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"

这样,您只需键入:

git pub

就像你输入的一样:

git push -u origin HEAD:refs/for/master

或者

git push -u origin HEAD:refs/for/myremote-branch

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

于 2012-01-04T18:40:17.763 回答
3

您可能还对git-review感兴趣,它不仅push通过简单地提供以下内容来消除:

git review

...但还可以让您执行以下操作:

git review branchname

查看上面链接上的使用部分了解更多信息。

于 2013-12-06T18:55:39.823 回答
1

也许不完全是您正在寻找的东西,但如果您:

  1. 重命名gerritreview(with git remote rename gerrit review),
  2. git config push.default tracking, 和
  3. git config branch.master.merge refs/for/master,

然后你可以git push review,你的主人将被推到refs/for/mastergerrit 上。

而且,顺便说一句,如果你git config branch.master.remote review,那么你可以git push得到同样的东西。

于 2011-09-15T01:42:33.620 回答
1

如果你想允许直接推送到 refs/heads/ 中的分支,你只需在 gerrit web gui 中添加一个权限:

  1. 打开项目属性,
  2. 选择访问,
  3. 添加参考,
  4. 裁判/头/ *
  5. 选择“推”
  6. 输入组名,
  7. 裁判/头/ *
  8. 节省。

你完成了。

于 2012-08-20T17:25:26.020 回答
0

那些只想通过 gerrit 推送到 master 分支的人,将以下内容添加到.git\config

[remote "review"]                                                        
    push = HEAD:refs/for/master                 
    pushurl = ssh://GERRIT_URL:29418/PROJECT_NAME

或在项目目录中执行

git config remote.review.push HEAD:refs/for/master
git config remote.review.pushurl ssh://GERRIT_URL:29418/PROJECT_NAME

然后你可以使用

git push review

推给格里特。使用此方法,您可以从任何本地分支推送,数据将始终转到主分支

于 2015-11-02T10:56:29.507 回答
0

您好,只需创建一个简单的脚本来自动化该过程:

   #!/bin/bash

   GROUP1_REVIEWER="group1 list of mail separated by space"
   GROUP2_REVIEWER="group2 list of mail separated by space"
   GROUP3_REVIEWER="group3 list of mail separated by space"

   ORIGIN=$(git config --get remote.origin.url)
   [ $? -ne 0 ] && echo "Git repo not found; EXIT" && exit 1

   case $1 in
       group1) REVIEWER_LIST=$GROUP1_REVIEWER ;;
       group2) REVIEWER_LIST=$GROUP2_REVIEWER ;;
       group3) REVIEWER_LIST=$GROUP3_REVIEWER ;;
       *) echo "Please specify one existent group"; exit 1 ;;
   esac

   [ "$1" == "" ] && echo "Please specify one existent group" && exit 1

   pushurl=${ORIGIN}
   push="HEAD:refs/for/master"
   receivepack="$(printf "git receive-pack "; for reviewer in $REVIEWER_LIST ; do printf -- "--reviewer $reviewer "; done)"

   # check if review remote is already present
   git config -l | grep remote.review 1>/dev/null 2>&1
   [ $? -eq 0 ] && echo "Remote review already present; configure it manually; EXIT" && exit 1

   # start config
   echo "Adding new remote review config"
   git config remote.review.pushurl $pushurl
   git config remote.review.push $push
   git config remote.review.receivepack "$receivepack"

您将用作:

git_review_add_config.sh group1

并选择您需要配置的不同组。

于 2017-04-25T09:25:03.420 回答