Referencje (refs)

Posługiwanie się SHA1 commitu jest wygodne do pewnego momentu. Kiedy w naszym projekcie pojawiają się branche (poza domyślnym, masterem), podłączamy lokalne repozytorium do zdalnych i zaczynami tagować nasze commity samo SHA1 staje się nieporęczne. Z pomocą przychodzi nam wtedy refs.

Refs jest niebezpośrednim sposobem odniesienia się do commitu, za pomocą aliasu. Wewnętrznie Git wykorzystuje refs do reprezentowania branchy oraz tagów.

Refs są przechowywane w katalogu .git/refs. Przykładowa zawartość (zależąca od stanu naszego repozytorium) może wyglądać następująco:

ll .git/refs

Standardowo możemy zobaczyć 3 katalogi:

  • heads - zawiera wszystkie lokalne branche
  • remotes - zawiera wszystkie branche pobrane ze wszystkich zdalnych repozytoriów (każde repozytorium odwzorowane jest w postaci podkatalogu)
  • tags - analogicznie do heads lecz zawiera tagi zamiast branchy

Każdy z plików znajdujący się w katalogu .git/refs zawiera SHA1 commitu, na który wskazuje branch/tag. Aby się o tym przekonać wykonać w terminalu następujące polecenia:

cat .git/refs/heads/master
git log --format=format:%H -1 master

Wynik obu poleceń powinien być jednakowy.

Posługiwanie się refs

Refs może być wykorzystywane podobnie jak samo SHA1 commitu w poleceniach git. Przykładowo aby zobaczyć zawartość ostatniego commitu na branchu master możemy wykonać następujące polecenie:

git show master

Wewnętrznie git przetłumaczy to polecenie na:

git show refs/heads/master

Jest to szczególnie istotne kiedy posiadamy wiele branchy o tej samej nazwie na przestrzeni wielu repozytoriów (localny + zdalne). Aby sprawdzić zawartość ostatniego commitu na zdalnym branchu master wystarczy wykonać polecenie:

git show refs/remotes/origin/master

results matching ""

    No results matching ""