91

git-configのマニュアルページには、push.defaultの次のオプションがリストされています。

nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.

ほとんどの場合、アップストリームブランチは通常同じ名前であり、同じ名前のブランチ( "current")であるため、ブランチのアップストリームブランチへのプッシュは同じ名前のブランチへのプッシュと同じであると思います。 )通常(または常に、定義上?)はアップストリームになります。では、違いは何ですか?

更新 git-configのマニュアルページが更新されたので(予想どおり)、そこで行われた区別がより明確になる可能性があります。

4

2 に答える 2

73

質問の違いを要約しました。設定されたアップストリームブランチにupstreamプッシュしますが、アップストリームブランチは現在のローカルブランチcurrentと同じ名前であると想定し、その特定の名前にプッシュします。実際には、ローカルブランチのアップストリームトラッキングブランチがローカルブランチ自体と同じ名前であると想定する理由はありません。

たとえば、複数のリポジトリで作業している場合、または多くの共有開発者リモートで作業している場合、allen-masterまたはなど、同じブランチの異なるフォークを追跡することになりますsusan-master。どちらもmaster、それぞれAllenとSusanのリポジトリのブランチを追跡します。この場合、currentこれらのブランチ名はリモートに存在しないため、は正しくない設定になります。upstreamただし、問題なく動作します。

より実用的な例は、developmentproductionリポジトリの両方を追跡することです。ワークフローはそれぞれに異なるメインラインブランチを使用する場合がありますが、それは混乱を招く可能性があります。あなたがコードインテグレーターであり、両方のリポジトリのmasterブランチを別々に追跡したいとします。

git checkout -b production --track production/master
git checkout -b development --track development/master

これで、それぞれのリポジトリを追跡する2つのブランチができましたが、どちらもmaster命名規則をまったく使用していません。ブランチ名についてはほとんど混乱がありません。ブランチ名は、追跡対象を明示的に記述しています。それでも、どちらのリモートにもまたはブランチpush.default = currentが含まれていないため、意味がありません。developmentproduction

于 2012-08-08T21:23:19.223 に答える
7

current現在のブランチをリモートリポジトリ上の同じ名前のブランチにプッシュします。

upstream現在のブランチをアップストリームブランチにプッシュします。

アップストリームブランチは、現在のブランチのアップストリームとして明示的または暗黙的に定義されているブランチです。これは、デフォルトでプッシュとプルがこのブランチと同期することを意味します。アップストリームブランチは、現在のブランチ自体と同じリポジトリにある可能性があります。ローカルマスターブランチをローカル機能(トピック)ブランチのアップストリームとして設定し、それらの間でプッシュおよびプルするなど、興味深いことを行うことができます。

暗黙的なアップストリームセットアップは、構成branch.autosetupmerge値を介して行われます。ドキュメントはgit configヘルプページにあります。明示的なアップストリームセットアップは-u、コマンドのオプションを使用して実行されますgit branch。詳細については、ヘルプページを参照してください。

于 2013-05-12T08:11:57.200 に答える