【发布时间】:2011-11-17 10:37:42
【问题描述】:
我正在配置Gerrit,我想避免写:
git push gerrit HEAD:refs/for/master
我想写:
git push review
我确定可以修改 .git/config,但我无法使其工作。
【问题讨论】:
我正在配置Gerrit,我想避免写:
git push gerrit HEAD:refs/for/master
我想写:
git push review
我确定可以修改 .git/config,但我无法使其工作。
【问题讨论】:
我设置了两种不同的推送类型,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
正在工作,而不是上面的“审查”部分应该也能正常工作,而无需更改任何其他内容。
【讨论】:
git config remote.review.push HEAD:refs/for/master我觉得master的review比较频繁。
为什么不创建 bash 别名?
alias review="git push gerrit HEAD:refs/for/master"
现在你可以输入:
review
如果您想处理更多而不是一个 gerrit 分支,请查看我的 bash 助手:https://github.com/tomwys/gerrit-bash-commands
【讨论】:
您最好在别名中使用 Git 脚本。像这样的东西基于“上游”分支,虽然我还想稍微清理一下:
[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 之一兼容。
【讨论】:
您可能还对git-review 感兴趣,它不仅消除了push,只需提供:
git review
...但也可以让您执行以下操作:
git review branchname
查看上面链接中的“使用”部分了解更多信息。
【讨论】:
也许不完全是您想要的,但如果您:
gerrit 重命名为review(与git remote rename gerrit review),git config push.default tracking,和git config branch.master.merge refs/for/master,然后你可以git push review,你的主人会被推送到gerrit上的refs/for/master。
顺便说一句,如果您git config branch.master.remote review,那么您只需git push 就可以得到同样的东西。
【讨论】:
git pull 要获取和合并什么远程引用。
如果你想允许直接推送到 refs/heads/ 中的分支,你只需在 gerrit web gui 中添加一个权限:
你已经完成了。
【讨论】:
想要只通过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
推送给 Gerrit。使用此方法,您可以从任何本地分支推送,数据将始终转到主分支
【讨论】:
您好,只需创建一个简单的脚本来自动化该过程:
#!/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
并选择您需要配置的不同组。
【讨论】: