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


121

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

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

有人可以解释我所缺少的去中心化工作流之间的任何重要区别吗?



2
@Trevor-与我的问题完全无关。
void.pointer 2014年

Answers:


184

区别在于,如果当前分支未跟踪远程上游分支(即使远程存在相同名称的分支),则使用simplegit 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 -将当前分支推到同名的分支。


4
我猜唯一的“奖励”问题是“为什么”。我猜想强制上游跟踪分支可以消除错误(意外地在错误的远程覆盖该分支)。
void.pointer 2015年

7
简单似乎是更安全的“安全带”选项。
乔纳森(Jonathan)

2
很长一段时间后重新审视我自己的问题:-)怎么current知道选择哪个遥控器?如果您没有设置跟踪分支,它将推送到何处?
void.pointer

2
它推送到默认的遥控器->表示原点。来自man git-push:在命令行中未使用<repository>参数指定推送位置时,将查询当前分支的branch。*。remote配置以确定推送位置。如果缺少配置,则默认为原始。
reegnz

2
多年来,我一直使用“当前”方法,而且绝对没有问题。在大多数情况下,它的工作原理是:拉/推到一个仓库,建立新分支或在不太可能发生命名冲突的地方检查现有分支。正常工作,没有问题。不能说它应该是默认值(因为它是不安全的),但是谢天谢地它存在。
trisweb

10

区别在于,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` 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.