Jeśli mam plik lub katalog, który jest dowiązaniem symbolicznym, i przesyłam go do repozytorium Git, co się z nim stanie?
Zakładam, że pozostawia go jako łącze symboliczne, dopóki plik nie zostanie usunięty, a następnie, jeśli wyciągniesz plik ze starej wersji, po prostu utworzy normalny plik.
Co robi, gdy usuwam plik, do którego się odwołuje? Czy to tylko zatwierdza wiszący link?
git
version-control
symlink
Alex
źródło
źródło
.gitignore
widzi dowiązanie symboliczne jako plik, a nie folder.../..
w razie potrzeby.git pull
plik zamiast dowiązania symbolicznego, spróbuj uruchomić klienta Git jako administrator.Odpowiedzi:
Git po prostu przechowuje zawartość łącza (tj. Ścieżkę obiektu systemu plików, do którego się łączy) w „obiekcie blob”, tak jak w przypadku zwykłego pliku. Następnie przechowuje nazwę, tryb i typ (w tym fakt, że jest to dowiązanie symboliczne) w obiekcie drzewa reprezentującym jego zawierający katalog.
Podczas pobierania drzewa zawierającego łącze przywraca on obiekt jako dowiązanie symboliczne niezależnie od tego, czy istnieje docelowy system plików.
Usunięcie pliku, do którego odwołuje się dowiązanie symboliczne, nie wpływa w żaden sposób na dowiązanie symboliczne kontrolowane przez Git. Będziesz miał wiszące odniesienie. Od użytkownika zależy usunięcie lub zmiana linku, aby w razie potrzeby wskazał coś ważnego.
źródło
core.symlinks
zmienną konfiguracyjną na wartość false, a dowiązania symboliczne zostałyby wypisane jako małe pliki zwykłego tekstu zawierające link.symlinks = false
z nimi problemy.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:
Git jeszcze nie wie o tym pliku.
git ls-files
pozwala kontrolować swoje (indeks-s
drukujestat
wyjście -Jak):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.
Co więc zostało dodane?
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 wls-files
danych wyjściowych. Byłby podobny100644
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. Odman git-config
: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.
źródło
Symlinkowane katalogi:
Ważne jest, aby pamiętać, co dzieje się, gdy istnieje katalog będący miękkim łączem. Każde pobranie Git wraz z aktualizacją usuwa link i czyni go normalnym katalogiem. Tego nauczyłem się na własnej skórze. Niektóre spostrzeżenia tu i tutaj.
Przykład
Przed
git add/commit/push
Po
git pull
AND znaleziono kilka aktualizacjiźródło