我喜欢简单地使用git push
将当前分支推送(仅)到配置的上游。为此我设置了git config push.default upstream
,它完全正确。
现在我尝试为Gerrit设置一个合适的遥控器,它会自动推送到refs/for/*
。
这个想法是这样做的:
[remote "gerrit"]
url = ssh://host:port/repo
push = refs/heads/*:refs/for/*
我想输入git push gerrit
并期望git只将当前分支推送到正确的引用。
不幸的是现在git试图将所有本地分支推送到Gerrit。 - 有没有办法告诉git只推送当前分支,如上面的push.default
?
更新
对于Gerrit,我需要一个refspec,比如'branch:refs / for / branch',branch是当前的分支。
问题:
git push
自动推送到正确的refs / for ref?目前,我发现最好的方法是将所有内容包装在一个单独的脚本中,如建议的here。但我仍然不相信只有合适的refspec是不可能的。
答案 0 :(得分:1)
根据source,Git目前通过生成包含显式名称的显式refspec来实现push.default = upstream
。
似乎目前无法通过单个通用refspec指定该行为,并且构建显式refspec的某些脚本(如建议的here)是目前唯一的方法。
答案 1 :(得分:0)
作为一种解决方法,我拦截了git函数并使其执行默认推送:
.bashrc
git ()
{
if [ $1 = "push" -a -z $2 ]
then
/usr/bin/git push origin HEAD:refs/for/master
else
/usr/bin/git $@
fi
}
我猜它是一个hack,但是对我有用。
答案 2 :(得分:-1)
您可以使用命令git config --global push.default current
将git配置为仅将当前分支发送到远程存储库。
您可以传递给push.default的其他选项是:
nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.
可以在git help config
命令中看到这些配置。
更新:但是,更仔细地阅读手册页,push.default
“定义了如果在命令行上没有给出refspec,在远程中没有配置refspec,并且没有隐含refspec,那么git push应该采取的操作通过命令行中给出的任何选项“。因此,我认为在指定refspec时,您需要使用该脚本仅发送当前分支。