Możesz dowiedzieć się, co Git robi z plikiem, widząc, co robi po dodaniu go do indeksu. Indeks jest jak zatwierdzenie wstępne. Po zatwierdzeniu indeksu można użyć git checkout
do przeniesienia wszystkiego, co było w indeksie z powrotem do katalogu roboczego. Co więc robi Git, gdy dodasz dowiązanie symboliczne do indeksu?
Aby się dowiedzieć, najpierw utwórz dowiązanie symboliczne:
$ ln -s /path/referenced/by/symlink symlink
Git jeszcze nie wie o tym pliku. git ls-files
pozwala kontrolować swoje (indeks -s
drukuje stat
wyjście -Jak):
$ git ls-files -s ./symlink
[nothing]
Teraz dodaj zawartość dowiązania symbolicznego do składnicy obiektów Git, dodając go do indeksu. Po dodaniu pliku do indeksu Git przechowuje jego zawartość w magazynie obiektów Git.
$ git add ./symlink
Co więc zostało dodane?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
Hash jest odniesieniem do spakowanego obiektu, który został utworzony w magazynie obiektów Git. Możesz zbadać ten obiekt, jeśli zajrzysz .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
do katalogu głównego repozytorium. To jest plik, który Git przechowuje w repozytorium, który możesz później sprawdzić. Jeśli przejrzysz ten plik, zobaczysz, że jest on bardzo mały. Nie przechowuje zawartości połączonego pliku.
(Uwaga 120000
to tryb wymieniony w ls-files
danych wyjściowych. Byłby podobny 100644
do zwykłego pliku.)
Ale co Git robi z tym obiektem, gdy wypisujesz go z repozytorium i do swojego systemu plików? To zależy od core.symlinks
konfiguracji. Od man git-config
:
core.symlinks
Jeśli false, dowiązania symboliczne są sprawdzane jako małe zwykłe pliki zawierające tekst łącza.
Tak więc, z dowiązaniem symbolicznym w repozytorium, przy kasie otrzymujesz albo plik tekstowy z odniesieniem do pełnej ścieżki systemu plików, albo odpowiednie dowiązanie symboliczne, w zależności od wartości core.symlinks
konfiguracji.
Tak czy inaczej dane, do których odwołuje się dowiązanie symboliczne, nie są przechowywane w repozytorium.
.gitignore
widzi dowiązanie symboliczne jako plik, a nie folder.