"简单" vs" current" push.default在git中用于分散工作流程

时间:2014-05-28 17:20:54

标签: git git-push git-config

从功能上讲,在分散的工作流程中,我看不到simple配置设置的currentpush.default选项之间存在差异。

current会将当前分支推送到指定远程上的同名分支。对于当前分支的跟踪和任何未跟踪的遥控器,simple将有效地执行相同的操作(在两种情况下都强制执行相同的分支名称)。

有人可以解释我失去的分散工作流程之间的任何重要差异吗?

2 个答案:

答案 0 :(得分:163)

不同之处在于simple,如果当前分支不跟踪远程上游分支,git push(未通过refspec)将失败(即使具有相同名称的分支)存在于遥控器上:

$ git checkout -b foo
Switched to a new branch 'foo'

$ git config push.default simple
$ git push
fatal: The current branch foo has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin foo

另一方面,current并不关心当前分支是否跟踪上游,它只是想推送到任何具有相同名称的分支:

$ git config push.default current
$ git push
Total 0 (delta 0), reused 0 (delta 0)
To /Documents/GitHub/bare
 * [new branch]      foo-> foo

文档

来自Git configuration documentation

  
      
  • upstream - 将当前分支推送到其上游分支...

  •   
  • simple - 与上游一样,但如果上游分支的名称与本地名称不同,则拒绝推送......

  •   
  • current - 将当前分支推送到同名分支。

  •   

答案 1 :(得分:8)

不同之处在于simple推送到跟踪分支,如果它具有相同的名称,而current将推送到同名的分支,而不管任何跟踪分支:

$ git branch -vvv
  master 58d9fdc [origin/master: ahead 1] t1 bobo
* new    37132d3 [origin/save: ahead 1] t1 bibi   # <- tracking branch 'save'

$ git -c push.default=current push                # <- set `push.default=current`
Counting objects: 3, done.
Writing objects: 100% (3/3), 234 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /home/jthill/sandbox/20/t1
 * [new branch]      new -> new                   # <- and push creates `new`