git fetch
Polecenie git fetch
umożliwia pobranie commitów, plików i odwołań z repozytorium zdalnego do lokalnego. Pobieranie umożliwia sprawdzenie, nad czym pracują inni użytkownicy. Przypomina to polecenie svn update
, umożliwiając sprawdzenie postępów w historii centralnej, lecz nie wymaga scalania zmian z repozytorium. Git izoluje pobraną treść od istniejącej treści lokalnej; w efekcie nie wpływa na stan lokalnych prac programistycznych. Pobraną treść należy wyewidencjonować za pomocą polecenia git checkout. Dzięki temu pobieranie stanowi bezpieczny sposób kontroli commitów przed ich zintegrowaniem w lokalnym repozytorium.
Pobranie treści ze zdalnego repozytorium umożliwiają polecenia git pull
i git fetch
. Polecenie git fetch
można uznać za opcję „bezpieczną”. Pozwala pobrać treść zdalną, ale nie aktualizuje stanu roboczego lokalnego repozytorium, co chroni przed dokonaniem zmian w pracach lokalnych. Polecenie git pull
stanowi bardziej agresywną alternatywę: umożliwia pobranie treści zdalnej dla aktywnej gałęzi lokalnej i natychmiastowe wykonanie polecenia git merge
w celu utworzenia commitu scalania dla nowej treści zdalnej. W przypadku występowania oczekujących zmian spowoduje to konflikty i rozpoczęcie przepływu rozwiązywania konfliktów scalania.
Jak działa polecenie git fetch z gałęziami zdalnymi
Aby lepiej zrozumieć sposób działania polecenia git fetch
, omówmy, w jaki sposób Git organizuje i przechowuje commity. W katalogu ./.git/objects
repozytorium system Git przechowuje wszystkie commity lokalne i zdalne. Git zachowuje ich odrębność dzięki odwołaniom do gałęzi. Odwołania do gałęzi lokalnych są przechowywane w katalogu ./.git/refs/heads/
. Wykonanie polecenia git branch spowoduje wyświetlenie listy odwołań do gałęzi lokalnych. Poniżej przedstawiono przykładowy wynik polecenia git branch
z użyciem przykładowych nazw gałęzi.
git branch
main
feature1
debug2
Po sprawdzeniu okaże się, że zawartość katalogu /.git/refs/heads/
jest podobna.
ls ./.git/refs/heads/
main
feature1
debug2
materiały pokrewne
Zaawansowany dziennik Git
POZNAJ ROZWIĄZANIE
Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud
Gałęzie zdalne są podobne do lokalnych, ale odwzorowują commity z repozytorium innej osoby. Aby uniknąć pomylenia z gałęziami lokalnymi, nazwy gałęzi zdalnych poprzedza nazwa elementu zdalnego, do którego należą. Podobnie jak w przypadku gałęzi lokalnych system Git zawiera także odwołania do gałęzi zdalnych. Odwołania do gałęzi zdalnych znajdują się w katalogu ./.git/refs/remotes/
. Poniższy przykładowy fragment kodu przedstawia gałęzie widoczne po pobraniu repozytorium zdalnego o nazwie remote-repo:
git branch -r
# origin/main
# origin/feature1
# origin/debug2
# remote-repo/main
# remote-repo/other-feature
Dane wyjściowe zawierają sprawdzone wcześniej gałęzie lokalne, ale teraz na początku nazwy widnieje zwrot origin/
. Ponadto widzimy gałęzie zdalne poprzedzone zwrotem remote-repo
. Gałąź zdalną można wyewidencjonować tak jak lokalną, ale powoduje to utworzenie stanu odłączonego wskaźnika HEAD
(podobnie jak w przypadku wyewidencjonowania starszego commitu). Można powiedzieć, że są to gałęzie „tylko do odczytu”. Aby wyświetlić gałęzie zdalne, wystarczy dodać flagę -r
do polecenia git branch
.
Gałęzie zdalne można sprawdzić za pomocą standardowych poleceń git checkout
i git log
. Jeżeli zatwierdzisz zmiany zawarte w gałęzi zdalnej, możesz je scalić z gałęzią lokalną za pomocą standardowego polecenia git merge
. Inaczej niż w przypadku modelu SVN synchronizacja repozytorium lokalnego ze zdalnym to proces dwuetapowy: pobieranie i scalanie. Polecenie git pull
to wygodny sposób skrócenia tej procedury.
Git — polecenia pobierania i opcje
git fetch <remote>
Pobranie wszystkich gałęzi z repozytorium. Umożliwia także pobranie wszystkich wymaganych zatwierdzeń oraz plików z drugiego repozytorium.
git fetch <remote> <branch>
Działa tak samo jak polecenie powyżej, ale pobiera tylko określoną gałąź.
git fetch --all
Zaawansowane polecenie, które powoduje pobranie wszystkich zarejestrowanych elementów zdalnych oraz ich gałęzi:
git fetch --dry-run
Opcja --dry-run
umożliwia próbne uruchomienie polecenia. Przedstawi przykłady działań, jakie zostaną wykonane podczas pobierania, ale ich nie zastosuje.
Przykłady poleceń pobierania w środowisku Git
git fetch — gałąź zdalna
W poniższym przykładzie przedstawiamy sposób pobrania gałęzi zdalnej i aktualizacji lokalnego stanu prac dotyczących treści zdalnej. Na potrzeby tego przykładu załóżmy, że istnieje centralne repozytorium źródłowe, z którego sklonowano repozytorium lokalne za pomocą polecenia git clone
. Przyjmijmy także, że utworzono dodatkowe repozytorium zdalne o nazwie coworkers_repo zawierające gałąź feature_branch, którą skonfigurujemy i pobierzemy. Uwzględniając te założenia, przejdźmy do dalszej części przykładu.
Najpierw należy skonfigurować zdalne repozytorium za pomocą polecenia git remote.
git remote add coworkers_repo git@bitbucket.org:coworker/coworkers_repo.git
W tym przypadku utworzyliśmy odniesienie do repozytorium współpracownika, używając adresu URL repozytorium. Teraz przekażemy zdalną nazwę do polecenia git fetch
, aby pobrać zawartość.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
Następnie dostępną lokalnie zawartość gałęzi coworkers/feature_branch musimy zintegrować z lokalną kopią roboczą. Zacznijmy od użycia polecenia git checkout, aby wyewidencjonować nowo pobraną gałąź zdalną.
git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
Dane wyjściowe operacji wyewidencjonowania wskazują, że jesteśmy w stanie odłączonego wskaźnika HEAD
. To oczekiwany wynik, który oznacza, że nasze odwołanie HEAD
wskazuje na odwołanie, które nie jest zgodne z naszą historią lokalną. Skoro odwołanie HEAD
wskazuje na odwołanie coworkers/feature_branch, możemy z niego utworzyć nową gałąź. Wynik „detached HEAD
” wskazuje, jak tego dokonać za pomocą polecenia git checkout
:
git checkout -b local_feature_branch
Utworzyliśmy nową gałąź lokalną o nazwie local_feature_branch, która powoduje, że aktualizacje HEAD
wskazują na najnowszą zawartość zdalną, w związku z czym możemy kontynuować programowanie od tego miejsca.
Synchronizacja źródła za pomocą polecenia git fetch
Następny przykład przedstawia typowy przepływ pracy synchronizacji repozytorium lokalnego z gałęzią główną repozytorium centralnego.
git fetch origin
Spowoduje to wyświetlenie pobranych gałęzi:
a1e8fb5..45e66a4 main -> origin/main
a1e8fb5..9e8ab1c develop -> origin/develop
* [new branch] some-feature -> origin/some-feature
Commity z tych nowych gałęzi zdalnych przedstawiono na poniższym schemacie jako kwadraty, a nie kółka. Jak widać, polecenie git fetch
daje dostęp do całej struktury gałęzi innego repozytorium.
Aby zobaczyć, jakie commity zostały dodane do elementu głównego na wyższym poziomie, można uruchomić polecenie git log
z filtrem origin/main:
git log --oneline main..origin/main
Do zatwierdzenia zmian i ich scalenia z lokalną gałęzią główną służą następujące polecenia:
git checkout main
git log origin/main
Następnie można użyć polecenia git merge origin/main
:
git merge origin/main
Gałęzie origin/main i main wskazują teraz ten sam commit, a dane są zsynchronizowane z kodem na wyższym poziomie.
Git fetch — podsumowanie
Podsumowując, git fetch
to podstawowe polecenie do pobierania zawartości z repozytorium zdalnego. Polecenia git fetch
używa się razem z poleceniami git remote
, git branch
, git checkout
i git reset, aby zaktualizować repozytorium lokalne do stanu zdalnego. Polecenie git fetch
to istotny element przepływów pracy w systemie Git opartych na współpracy. Działa podobnie jak
git pull
, z tym że polecenie git fetch
można uznać za bezpieczniejsze.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.