“简单”vs“当前”push.default在分散工作流的git中

从功能上讲,在分散的工作流程中,我看不到push.default配置设置的simplecurrent选项之间的区别。

current会将当前分支推送到指定远程上的同名分支。 对于当前分支的跟踪和任何未跟踪的远程(它在两种情况下强制使用相同的分支名称), simple也会有效地做同样的事情。

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


不同之处在于,如果当前分支没有跟踪远程上游分支(即使远程存在具有相同名称的分支),使用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配置文档:

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

  • simple - 像上游,但拒绝推动,如果上游分支的名称不同于当地的...

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


  • 不同之处在于,如果simple的追踪分支具有相同的名称,则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` 
    
    链接地址: http://www.djcxy.com/p/26809.html

    上一篇: "simple" vs "current" push.default in git for decentralized workflow

    下一篇: Is it possible to use 'else' in a python list comprehension?