git hard links - apakah ia tahu bahwa file adalah hard link?

16

Saya mulai menggunakan tautan keras alih-alih tautan simbolis untuk mengatur file ...

Saya telah melakukan ini untuk gambar yang saya ambil untuk mengkategorikannya serta menunjukkan yang mana yang ingin saya cetak, dll.

Saya menggunakan git untuk mem-backup gambar saya dan tampaknya git berpikir itu adalah file baru karena repositori bertambah sekitar 1GB. Git melakukan deteksi nama dengan sangat baik jika saya tidak menggunakan git untuk mengganti nama file, tetapi apakah ia juga menangani tautan keras?

Walter

Walter
sumber
2
Semua file normal adalah tautan keras. Mungkin maksud Anda "file dengan banyak tautan keras"?
Ignacio Vazquez-Abrams
Ya, itulah yang saya maksudkan.
Walter
1
Perbaiki saya jika saya salah, tetapi tidakkah saya mendapat lebih banyak lagu content? Mengapa penting jika file memiliki konten yang sama, kemudian - setelah semua, mereka secara teknis file yang sama.
new123456
1
Untuk orang yang menemukan ini - mungkin pertimbangkan untuk menggunakan tautan Simbolik sebagai gantinya? stackoverflow.com/q/954560/492
CAD bloke
Sepertinya Anda menginginkan sistem file berbasis tag.
Nayuki

Jawaban:

14

File yang dilacak berlipat ganda tidak akan menyebabkan penyimpanan objek Git bertambah karena setiap tautan akan diwakili oleh objek gumpalan yang sama persis. Namun, pohon kerja Anda mungkin akan tumbuh karena tautan yang terputus.

Git tidak melacak apakah file pohon yang dilacak dan berfungsi adalah tautan keras ke file yang sama.

Git akan meninggalkan file pohon yang ditautkan secara berlipat ganda, dilacak, bekerja sendiri jika Anda tidak memintanya melakukan apa pun yang melibatkan modifikasi konten pada nama path tersebut atau menghapus entri direktori pathnames. Tetapi, jika Anda harus (misalnya) checkout komit atau cabang lama dan kemudian kembali ke cabang / komit Anda yang normal, maka Git akan berakhir dengan “memutus” tautan keras (mengganti nama path yang terpengaruh dengan yang baru (tetapi identik) ) file alih-alih menciptakan kembali situasi multiply linked Anda).

Untuk memulihkan status multiply linked Anda, Anda dapat menulis sebuah program untuk memindai file yang identik dan menghubungkannya kembali ke salah satu file. Operasi “relink” seperti itu mungkin lebih rumit jika semua tautan tidak ada di pohon kerja itu sendiri atau, setidaknya, tidak di beberapa lokasi “eksternal” yang mudah diidentifikasi (yaitu mungkin akan sulit untuk memulihkan tautan jika Anda menautkan File "acak" dari seluruh direktori home Anda menjadi repositori "cadangan" dan menggunakan Git untuk memodifikasi pohon yang berfungsi).

Idenya telah muncul di milis Git:

Chris Johnsen
sumber
Untuk linux berbasis debian, ada alat hardlink ( packages.debian.org/search?keywords=hardlink ) yang dapat melakukan operasi relink ini. Sayangnya, ini tidak terlalu cepat
Daniel Alder
Saya menjalankan hardlinksebagai pekerjaan malam /var/lib/jenkins.
Amedee Van Gasse