В чем разница между `git fetch origin` и` git fetch git: // 127.0.0.1 / ` - PullRequest
0 голосов
/ 11 ноября 2018

Я экспериментирую с git и создал репозиторий в ~/A, содержащий только главную ветвь.

Затем я клонировал этот репозиторий в ~/B (запустив git daemon в ~/A и запустив git clone git://127.0.0.1/).

Затем я создал новую ветку test в ~/A и попытался получить эту ветку в ~/B. Однако git fetch git://127.0.0.1/ показал только

From git://127.0.0.1
 * branch            HEAD       -> FETCH_HEAD

Чтобы получить новую ветку, я в итоге сделал git fetch, что, насколько я понимаю, эквивалентно git fetch origin. В любом случае, оба из них дают мне

From git://127.0.0.1
 * [new branch]      test       -> origin/test

, после чего я могу начать работать с веткой test в ~/B, выполнив git checkout test.

Как это возможно, что git fetch git://127.0.0.1/ и git fetch origin имеют разные результаты, когда git remote -v показывает

origin  git://127.0.0.1/ (fetch)
origin  git://127.0.0.1/ (push)

Демон показывает одинаковый запрос для всех команд, а именно

[20291] Extended attribute "host": 127.0.0.1
[20291] Request upload-pack for '/'

1 Ответ

0 голосов
/ 11 ноября 2018

Когда вы запускаете git fetch origin, вы просите git найти конфигурацию для вашего удаленного именованного источника, извлечь из настроенного URL-адреса и записать любое сопоставление fetchspec для хранения информации удаленного в ветвях удаленного отслеживания (например, сопоставление вашего refs/remotes/origin/master к пульту refs/heads/master).

Когда вы запускаете git fetch <url>, вы обходите удаленную настройку. Git не пытается сопоставить URL-адрес с удаленным и использовать удаленную конфигурацию. (Действительно, это было бы неоднозначно, у вас может быть несколько пультов с одним и тем же URL, что может быть полезно для настройки различных спецификаций выборки).

Вместо этого git fetch <url> будет извлекать данные из указанного URL-адреса напрямую и помещать HEAD пульта дистанционного управления в ваш файл FETCH_HEAD. Поскольку удаленного нет, оно не обновляет удаленные ветви отслеживания. Вы можете просмотреть FETCH_HEAD, чтобы увидеть, что вы загрузили, однако гораздо проще получить его с помощью пульта, а не URL-адреса.

...