web-dev-qa-db-ja.com

分散型ワークフロー用のgitの「シンプル」と「現在」のPush.default

機能的に言​​えば、分散ワークフローでは、Push.default構成設定のsimpleオプションとcurrentオプションの違いはわかりません。

currentは、指定されたリモートの同じ名前のブランチに現在のブランチをプッシュします。 simpleは、現在のブランチの追跡されたリモートと追跡されていないリモートの両方で同じことを効果的に行います(両方のケースで同一のブランチ名を強制します)。

誰かが私が見逃している分散ワークフローの2つの重要な違いを説明できますか?

108
void.pointer

違いは、現在のブランチがリモートのアップストリームブランチを追跡していない場合、(同じ名前のブランチがリモートに存在する場合でも)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-現在のブランチを同じ名前のブランチにプッシュします。

165
user456814

違いは、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` 
8
jthill