如何configurationgit推动自动设置上游没有-u?
当我第一次推送本地创build的分支时,我希望git push origin
自动设置上游引用。
我知道git push -u
,但是我不想去考虑是否在-u
之前使用了-u
或者设置了上游引用。 换句话说,我希望git push
会自动将git push -u
的效果git push -u
到任何一个没有上游的分支上。
这可能吗? 如果它需要一个别名或实用程序脚本,那很好。
由于我不认为这是可能的使用gitconfiguration,这是你可以在bash中做什么:
[[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push
如果当前分支有一个远程跟踪分支,它调用git push
否则它调用git push -u
注意: 新的默认推送策略“ simple
”依赖于具有上游的分支意味着:
设置一个上游分支被视为一个自愿的步骤,而不是一个隐藏的自动化步骤
当“
git push [$there]
”没有声明要推送什么内容时,我们已经使用了传统的“匹配”语义(只要已经有相同名称的分支在那里,所有分支都被发送到远程) 。只有当当前分支设置为与远程分支集成时,我们才会使用“
simple
”语义将当前分支推送到具有相同名称的分支 。
有一个用户喜好configurationvariables“push.default
”来改变这一点。
所以从androidfish的回答中 ,你可以定义一个别名,用右引号( "
)转义( \"
):
git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push" git pu origin
Sc0ttyD 在评论中提出了以下别名:
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
在多行中:
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
我有同样的问题。 我发现这个别名(.gitconfig)
[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
用法:每个新分支git track
一次(目前签出)。 然后就像平常一样推:)
@VonC和@Frexuz的答案是有帮助的,但是他们的两个解决scheme都给我带来了一个错误。 用他们的答案,我拼凑了一些适合我的东西:
[alias] pu = ![[ $(git config "branch.$(git symbolic-ref --short HEAD).merge") = '' ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push
这会导致执行git push -u origin $BRANCHNAME
或git push
,这取决于是否定义了上游(属性branch.$BRANCHNAME.merge
)。
在命令行中input这个别名将需要转义代码,所以使用编辑器插入到正确的文件( $HOME/.gitconfig
(global) $HOME/.gitconfig
.git/config
(local)或/etc/gitconfig
(系统))
我通过使用这个简单的Bash脚本解决了这个问题。 它不会在现有分支上工作,但是如果使用此function创build所有分支,则始终会自动设置上游分支。
function con { git checkout -b $1 && git push --set-upstream origin $1; }
$ 1表示你在con
后传递的第一个参数,所以就像这样做:
git checkout -b my-new-branch && git push -u my-new-branch
…通过这样做:
con my-new-branch
我用有用的脚本做了一个git扩展,包括这个:
usage: git line push Push the current branch and set an upstream if needed.
git fetch origin git push origin
^这为我设置上游
只是:
$ alias gush="git push -u origin HEAD"