分散ワークフローのためのgitの「シンプル」vs「現在の」push.default


121

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

current指定されたリモートの同じ名前のブランチに現在のブランチをプッシュします。simple現在のブランチの追跡されたリモートと追跡されていないリモートの両方に対して、事実上同じことを行います(両方のケースで同じブランチ名が適用されます)。

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



2
@Trevor-それは私の質問とはまったく関係ありません。
void.pointer 2014年

回答:


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
シンプルな方が安全な「シートベルト」オプションのようです。
ジョナサン

2
久しぶりに自分の質問を再訪currentします:-)どのリモコンを選択するかをどうやって知りましたか トラッキングブランチセットがない場合、どこにプッシュしますか?
void.pointer 2017年

2
デフォルトのリモートにプッシュします->つまり、オリジンを意味します。man git-pushから:コマンドラインで<repository>引数を使用してどこにプッシュするかを指定していない場合、現在のブランチのbranch。*。remote設定が参照され、どこにプッシュするかが決定されます。構成がない場合は、デフォルトでoriginに設定されます。
reegnz '19

2
私は何年もの間、「current」を常に問題なく使用してきました。ほとんどの場合、機能します。1つのリポジトリへのプル/プッシュ、新しいブランチの作成、または名前の競合が起こりそうにない既存のブランチのチェックアウトです。問題なく動作します。(安全でないため)デフォルトであるとは言えませんが、存在していることに感謝します。
trisweb 2017年

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` 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.