1648

私はしばらくの間Gitを使用していて、最近アップデートをダウンロードしたのですが、しようとするとこの警告メッセージが表示されpushます。

warning: push.default is unset; its implicit value is changing in 
Git 2.0 from 'matching' to 'simple'. To squelch this message 
and maintain the current behavior after the default changes, use: 

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use: 

  git config --global push.default simple

私は明らかにそれを言及された値の1つに設定することができますが、それらはどういう意味ですか?simpleとの違いは何matchingですか?

1つのクライアントで変更した場合、リポジトリを共有している他のクライアントで何かを行う必要がありますか?

4

5 に答える 5

2163

ドキュメントで非常に詳細に説明されていますが、要約しようと思います。

  • matchingつまり、すべてのローカルブランチをリモート上の同じ名前のブランチgit pushプッシュします。これにより、意図しないブランチを誤ってプッシュすることが容易になります。

  • simple、現在のブランチのみをからプルするgit pushブランチにプッシュし、それらの名前が一致することも確認します。これはより直感的な動作であるため、デフォルトがこれに変更されています。git pull

この設定はローカルクライアントの動作にのみ影響し、コマンドラインでプッシュするブランチを明示的に指定することでオーバーライドできます。他のクライアントは異なる設定を持つことができます。プッシュするブランチを指定しない場合にのみ影響します

于 2012-10-30T22:11:49.733 に答える
19

これは古い投稿だと思いますが、同じ問題が発生し、答えを見つけるのに苦労したので、少し追加したいと思いました。

したがって、@hammarの答えは正しいです。使用push.default simpleは、ある意味で、ブランチでトラッキングを構成するのと同じであるため、プッシュおよびプルするときにリモートとブランチを指定する必要はありません。このmatchingオプションは、すべてのブランチをデフォルトのリモートの対応する対応するものにプッシュします(これは、リポジトリを別途構成していない限り、最初にセットアップされたものです)。

将来、他の人が役立つと思うことの1つは、OS X MountainLionでGit1.8を実行していて、このエラーが発生したことがないことです。Mavericksにアップグレードすると、突然表示されます(実行すると、OSが更新されるまで見たことのないものgit --versionが表示されます。git version 1.8.3.4 (Apple Git-47)

于 2013-10-26T17:00:05.747 に答える
8

構成の値「simple」についてgitからメッセージが表示された場合は、gitのバージョンを確認してください。

Xcodeをアップグレードした後(Mountain Lionを実行しているMacで)、gitを1.7.4.4から1.8.3.4にアップグレードした後、アップグレードがまだgit 1.7.4.4を実行している前にシェルが起動し、push.defaultの値「simple」について不平を言いました。グローバル構成。

解決策は、古いバージョンのgitを実行しているシェルを閉じて、新しいバージョンを使用することでした。

于 2014-01-31T15:35:00.327 に答える
2

Ubuntu 16.04(Git 2.7.4に付属)で大きな警告メッセージが表示されるのに、ArchLinuxでは表示されないのはなぜだろうと思っていました。その理由は、Git 2.8(2016年3月)で警告が削除されたためです。

Gitバージョン2.0前後の移行中、push.default構成変数を設定せずに「gitpush」を実行すると、ユーザーはかなり大きな警告を受け取りました。移行がかなり前に完了したため、警告は表示されなくなりました。

したがって、Git 2.8以降を使用している場合は警告が表示されず、デフォルトの動作push.defaultを変更する場合を除いて設定する必要はありません。'simple'

于 2018-03-19T13:10:12.760 に答える
0

重複として閉じる可能性のある他のスレッドから私の答えを持ってきました...

GITドキュメントから:Git Docs

以下に完全な情報を示します。要するに、それがリモートで同じ名前を持っている場合にのみ、そしてそれでもsimpleプッシュします。current working branchこれは初心者にとって非常に良い設定であり、のデフォルトになりますGIT 2.0

一方、リモートで同じ名前を持つすべてのブランチをローカルmatchingにプッシュします。(現在の作業ブランチに関係なく)。これは、共有したくないブランチも含めて、潜在的に多くの異なるブランチがプッシュされることを意味します。

私の個人的な使用法では、通常、別のオプションを使用します。currentこれは、現在の作業ブランチをプッシュします(変更のために常にブランチするため)。しかし、初心者のために私はお勧めしますsimple

push.defaultrefspec
が明示的に指定されていない場合にgitpushが実行するアクションを定義します。特定のワークフローには、さまざまな値が適しています。たとえば、純粋に中央のワークフロー(つまり、フェッチソースがプッシュ先と等しい)では、アップストリームがおそらく必要なものです。可能な値は次のとおりです。

なし-refspecが明示的に指定されていない限り、何もプッシュ(エラーアウト)しないでください。これは主に、常に明示的にすることで間違いを避けたい人を対象としています。

current-現在のブランチをプッシュして、受信側で同じ名前のブランチを更新します。中央ワークフローと非中央ワークフローの両方で機能します。

アップストリーム-現在のブランチを、通常は変更が現在のブランチに統合されているブランチ(@ {upstream}と呼ばれます)にプッシュバックします。このモードは、通常プルするのと同じリポジトリ(つまり中央ワークフロー)にプッシュする場合にのみ意味があります。

シンプル-一元化されたワークフローでは、アップストリームブランチの名前がローカルブランチの名前と異なる場合にプッシュを拒否する安全性が追加されたアップストリームのように機能します。

通常引っ張っているリモコンとは別のリモコンにプッシュするときは、現在のリモコンとして機能します。これは最も安全なオプションであり、初心者に適しています。

このモードはGit2.0のデフォルトになります。

マッチング-両端で同じ名前のすべてのブランチをプッシュします。これにより、プッシュするリポジトリは、プッシュされるブランチのセットを記憶するようになります(たとえば、常にmaintとmasterをプッシュし、他のブランチがない場合、プッシュするリポジトリには、これら2つのブランチと、ローカルのmaintとmasterが含まれます。そこにプッシュされます)。

このモードを効果的に使用するには、git pushを実行する前に、プッシュするすべてのブランチをプッシュする準備ができていることを確認する必要があります。このモードの全体的なポイントは、すべてのブランチを一度にプッシュできるようにすることです。通常、1つのブランチのみで作業を終了して結果をプッシュする場合、他のブランチは未完了ですが、このモードは適していません。また、このモードは、共有中央リポジトリにプッシュするのには適していません。他の人がそこに新しいブランチを追加したり、コントロール外の既存のブランチの先端を更新したりする可能性があるためです。

これは現在デフォルトですが、Git2.0はデフォルトをシンプルに変更します。

于 2020-07-27T14:01:11.533 に答える