機能的に言えば、分散ワークフローでは、Push.default
構成設定のsimple
オプションとcurrent
オプションの違いはわかりません。
current
は、指定されたリモートの同じ名前のブランチに現在のブランチをプッシュします。 simple
は、現在のブランチの追跡されたリモートと追跡されていないリモートの両方で同じことを効果的に行います(両方のケースで同一のブランチ名を強制します)。
誰かが私が見逃している分散ワークフローの2つの重要な違いを説明できますか?
違いは、現在のブランチがリモートのアップストリームブランチを追跡していない場合、(同じ名前のブランチがリモートに存在する場合でも)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
が同じ名前の場合、追跡ブランチにプッシュするのに対し、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`