4

リモートブランチがプル/プッシュ用にローカルブランチにリンクされていない場合でも、「git remote show origin」がリモートブランチを「追跡済み」としてリストするのはなぜですか? このコンテキストで「追跡」とは別の意味ですか? それが「追跡された」の全体的な意味だと思いました: git docs on branch tracking

1) 複数のリモート ブランチでレポを複製する

2) run git remote show origin-- 「testBranch」が追跡されていることを示します。ただし、git branch -vvマスター トラッキングのオリジン/マスターgit branch -aのみが正しく表示され、1 つのローカル ブランチ (マスター) しか存在しないことが正しく表示されます。

3) ではgit remote show origin、testBranch が「追跡済み」としてリストされている場合、どういう意味ですか? 明確にするために: セットアップ方法に「問題」はありません。すべて正常に動作します。リモート testBranch が「追跡済み」とラベル付けされている理由がわかりません。答えが欲しいところです。

hawk@Tug:~/temp/TestRepo (master)$ git remote show origin
* remote origin
  Fetch URL: git@github.com:haughki/TestRepo.git
  Push  URL: git@github.com:haughki/TestRepo.git
  HEAD branch: master
  Remote branches:
    master     tracked
    testBranch tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
hawk@Tug:~/temp/TestRepo (master)$ git branch -vv
* master 8df130e [origin/master] shoulda done this last time
hawk@Tug:~/temp/TestRepo (master)$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/testBranch
4

1 に答える 1

6

言及されている「追跡」は、 で発生するgit remote show「追跡」とは異なります。(または、「異なる」という言葉は強すぎるかもしれません。根底にある考え方は同じであるため、リポジトリ内のリモート トラッキング ブランチについて話しているのであって、それらの 1 つをアップストリームとしてたまたま持っているローカル ブランチがあるかどうかということではありません) .)git branch -vvgit checkout -b <branch> <upstream>

具体的には、指定されたリモートの行git remote showを調べ、fetch =これをリモートで現在実際に使用可能な参照と比較します (これらを表示するには実行git ls-remoteします)。

fetch =リモートの名前付きorigin読み取りのデフォルト行は次のとおりです。

fetch = +refs/heads/*:refs/remotes/origin/*

2 つの s に注意してください*。左側のものはリモートに存在するすべてのブランチに一致しますが、右側のものは「左側で一致した同じ名前に置き換える」ことを意味します。

リモートoriginに現在次の参照があるとします。

refs/heads/master
refs/heads/newbr
refs/tags/v1.2
refs/notes/commits

newbrさらに、最後にクローン作成、フェッチ、または別の方法で remote と通信して以来、originブランチが新しいと仮定すると、 はリストされず、git branch -rのみがリストされます。origin/masterorigin/newbr

ここで実行git remote show originすると、(他のものと一緒に)次のビットが得られます。

    master tracked
    newbr  new (next fetch will store in remotes/origin)

これは、両方のブランチが一致し、すでに を持っているがrefs/remotes/origin/master、まだ を持っていないことを意味しますrefs/remotes/origin/newbr

を実行するgit fetchと、 が取得されorigin/newbrます。しかし、 を実行する前に、 を取得しないように行git fetchを変更すると、はそれについて言及しなくなります。fetch =origin/newbrgit remote show origin

于 2015-02-07T05:58:25.640 に答える