2012-12-29 8 views
5

Załóżmy, że sklonowałem repozytorium git ze ścieżki /path/to/repo. Oryginalne repozytorium będzie zdalnym nazwanym "origin". Mogę pobierać obiekty od początku za pomocą polecenia git fetch origin. Spowoduje to pobranie wszystkich obiektów ze zdalnego "źródła", łącznie z utworzonymi gałęziami.Git: Jaka jest różnica między pobieraniem z nazwanego zdalnego i pobierania z adresu URL?

Co ciekawe, jeśli jawnie pobieram z tego samego repozytorium za pomocą komendy git fetch /path/to/repo, wydaje mi się, że wszystkie obiekty commit są pobierane, ale nie ma żadnych gałęzi.

Dlaczego tak jest? Czy nie robię dokładnie tego samego w obu przypadkach? Jak zachowanie Gita może być tak różne?

+0

One zwykle ciągnie ** ** z adresu URL, zamiast * pobieraniem * z adresu URL. –

Odpowiedz

5

Nazwany zdalnego korzystania z ich konfigurację, w której konfiguracja one refspec schematu kiedy ten pilot jest naciągane:

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

Tak, te dwa Format są równoważne:

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

Zasadniczo: git fetch <path> <source>:<destination>. Miejsce docelowe jest tutaj ważne, ponieważ jest tam zapisany zdalny HEAD i wskaźnik gałęzi.

Wykonując git fetch /path/to/repo, nie ustawiasz żadnego refspec. Tak więc pobiera tylko zatwierdzenia, a nie obiekty, ponieważ nie zostały poinstruowane, aby je pobrać i zapisać.

Możliwe, że niektóre szczegóły lub konwencja nazewnictwa są niepoprawne, możesz edytować. Jednak globalny pomysł powinien być poprawny

+0

Uwaga: nie ustawia oddziałów śledzenia zdalnego, ale ustawia "FETCH_HEAD". Po prostu dla FYI. –

2

Główną różnicą jest to, że pobieranie z adresu URL nie przechowuje stan oddziałów w zdalnym repozytorium na gałęzie zdalnego śledzenia (np refs/heads/master tj master gałąź w zdalnym origin do refs/remotes/origin/master aka origin/master) ale tylko w FETCH_HEAD.

Korzystanie URL zamiast konfigurowania zdalnego poprzez git remote add jest stosowany w jednorazowejciągnie tj:

$ git pull <URL> <branch or tag> 
Powiązane problemy