git hard links - czy wie, że plik jest twardym linkiem?


13

Zacząłem używać twardych linków zamiast dowiązań symbolicznych do organizowania plików ...

Robię to dla zdjęć, które robię, aby je kategoryzować, a także wskazywać, które z nich chcę wydrukować itp.

Używam git do tworzenia kopii zapasowych moich obrazów i wygląda na to, że git myślał, że są nowymi plikami, ponieważ repozytorium powiększyło się o 1 GB. Git naprawdę dobrze wykrywa zmiany nazw, jeśli nie użyję git do zmiany nazwy pliku, ale czy obsługuje również twarde łącza?

Walter


2
Wszystkie normalne pliki są twardymi dowiązaniami. Być może miałeś na myśli „pliki z wieloma twardymi linkami”?
Ignacio Vazquez-Abrams

Tak, miałem na myśli to.
Walter

1
Popraw mnie, jeśli się mylę, ale nie mam na to ochoty content? Dlaczego miałoby to mieć znaczenie, gdyby pliki miały tę samą zawartość, a więc - w końcu są technicznie ten sam plik.
new123456

1
Dla ludzi, którzy natknęli się na to - może zamiast tego rozważyć użycie dowiązań symbolicznych? stackoverflow.com/q/954560/492
CAD bloke

Wygląda na to, że chcesz systemu plików opartego na tagach.
Nayuki

Odpowiedzi:


13

Mnożenie połączonych śledzonych plików nie spowoduje znacznego wzrostu składnicy obiektów Gita, ponieważ każdy link będzie reprezentowany przez dokładnie ten sam obiekt blob. Twoje drzewo robocze może jednak rosnąć z powodu uszkodzonych linków.

Git nie śledzi, czy śledzone, pliki drzewa roboczego są twardymi dowiązaniami do tego samego pliku.

Git pozostawia wiele połączonych, śledzonych plików drzewa roboczego, jeśli nie poprosisz go o zrobienie czegoś, co wymagałoby zmodyfikowania zawartości tych ścieżek lub usunięcia wpisów katalogu nazw ścieżek. Ale jeśli miałbyś (np.) Pobrać stary commit lub gałąź, a następnie przełączyć się z powrotem do normalnej, najnowszej gałęzi / zatwierdzenia, wtedy Git skończy się „łamaniem” twardych linków (zastępując dotknięte nazwy ścieżek nowymi (ale identycznymi ) pliki zamiast odtwarzać wielokrotnie połączoną sytuację).

Aby odzyskać swój stan zwielokrotnionego połączenia, możesz napisać program do skanowania w poszukiwaniu identycznych plików i ponownie połączyć je z dowolnym plikiem. Taka operacja „ponownego łączenia” może być bardziej skomplikowana, jeśli wszystkie łącza nie znajdują się w samym drzewie roboczym, a przynajmniej nie w jakiejś łatwej do zidentyfikowania „zewnętrznej” lokalizacji (tzn. Odzyskanie łączy prawdopodobnie będzie trudne). „Losowe” pliki z całego katalogu domowego do „zapasowego” repozytorium i użycie Git do modyfikacji drzewa roboczego).

Pomysł pojawił się na liście dyskusyjnej Git:


W przypadku linuxów opartych na debianie istnieje narzędzie hardlink ( packages.debian.org/search?keywords=hardlink ), który jest w stanie wykonać tę operację ponownego łączenia. niestety nie jest zbyt szybki
Daniel Alder
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.