5

path から git リポジトリのクローンを作成するとします/path/to/repo。元のリポジトリは「origin」と呼ばれるリモートになります。コマンドを使用して、オリジンからオブジェクトを取得できますgit fetch origin。これにより、作成されたブランチを含め、リモートの「オリジン」からすべてのオブジェクトが取得されます。

興味深いのは、コマンドを使用して同じリポジトリから明示的に取得すると、git fetch /path/to/repoすべてのコミット オブジェクトを取得しているように見えますが、ブランチは取得していないように見えることです。

何故ですか?どちらの場合もまったく同じことをしていませんか?Git の動作はどうしてこんなに違うのでしょうか?

4

2 に答える 2

5

名前付きリモートはrefspec、このリモートがフェッチされたときにスキーマをセットアップする構成を使用します。

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url   = /path/to/repo

したがって、これら 2 つの形式は同等です。

git fetch origin
git fetch /path/to/repo +refs/heads/*:refs/remotes/origin/*

基本的に: git fetch <path> <source>:<destination>. リモートの HEAD とブランチ ポインタが保存される場所であるため、宛先はここで重要です。

git fetch /path/to/repo実行することで、refspec を設定しません。gitそのため、オブジェクトを取得して保存するように指示されていないため、オブジェクトではなくコミットのみをフェッチします。

ここにはいくつかの詳細または命名規則が正しくない可能性があります。自由に編集してください。しかし、グローバルな考え方は正しいはずです

于 2012-12-29T21:47:15.030 に答える
2

主な違いは、URL からのフェッチでは、リモート リポジトリのブランチの状態がリモート トラッキング ブランチに保存されず (たとえばrefs/heads/mastermasterリモートのブランチがoriginakarefs/remotes/origin/masterに保存されるorigin/master) FETCH_HEAD、.

リモート経由を設定する代わりに URL を使用することは、 1 回限りのプルgit remote addで使用されます。

$ git pull <URL> <branch or tag>
于 2012-12-30T12:45:55.840 に答える