2017-06-26 4 views
1

https://git-scm.com/docs/git-for-each-ref#git-for-each-ref-upstreamのgit-各-REF:フィールド名の違い `upstream`と` push`

表示REFから「上流」と考えることができるローカルREFの名前。上記のrefnameと同じ方法で:short,:lstripおよび:rstripを尊重します。さらに、 "先行N、後ろM"と:trackshortを表示して、 ">"(先)、 "<"(後ろ)、 "<"(先と後)、または "="を表示すると、:trackは、 (同期中)。 :trackは、未知のアップストリームのrefが見つかるたびに "[gone]"も表示します。 :track,nobracketを追加すると、角かっこなしのトラッキング情報(つまり、「先行N、後ろM」)が表示されます。 refに関連付けられたトラッキング情報がない場合は効果がありません。 nobracket以外のオプションは相互に排他的ですが、一緒に使用すると最後のオプションが選択されます。

https://git-scm.com/docs/git-for-each-ref#git-for-each-ref-push

表示REFため@{push}位置を表すローカルREFの名前。尊敬:short:lstrip:rstrip:track、および:trackshortオプションはupstreamとします。 @{push} refが設定されていない場合は、空の文字列を生成します。

誰でも簡単に言えば何が違いますか?

答えて

0

ブランチを1つのブランチから引き出し、別のブランチにプッシュするように設定することは可能です。たとえば、

git config remote.origin.push refs/heads/*:refs/heads/dev/* 

これはあなたpullマスターがあなたpushあなたmaster変更に行くだろうが、とき(おそらくorigin/master原点レポのrefs/heads/masterへのリモートrefがある)とき、合併しているものは変更されませんと言うことができます原点の枝をdev/master(フェッチすると、origin/dev/masterと表示されます)。

このように設定すると、upstreamはプルが発生した場所で、pushはプッシュが行われる場所です。

1

ブランチbr1ための上流は、このように設定されているリポジトリ考えてみましょう。この場合

$ git config --get branch.br1.remote 
origin 
$ git config --get branch.br1.merge 
refs/heads/br1 
$ git config --get-all remote.origin.fetch 
+refs/heads/*:refs/remotes/origin/* 

、ブランチbr1のための上流はorigin/br1です:

$ git rev-parse --symbolic-full-name "[email protected]{upstream}" 
refs/remotes/origin/br1 

しかし、我々はこのブランチの名前を変更するとしbr2。その上流は、origin/br1のままです。さらにpush.defaultsimpleに設定されているとします。この場合、git pushは、名前が一致しないためbr2originbr1にプッシュすることを拒否します。

この時点で、git for-each-refは、br2がその上流にはorigin/br1であることを示しますが、プッシュとしては何も表示されません。

push.default設定を変更する(またはグローバルデフォルトを上書きするリモートのデフォルトを設定する)と、これが変更されます。

Mark Adelsberger's answerと同様に、プッシュ値とフェッチ値を2つの異なる設定に設定することもできます。