git hard links - nó có biết một tập tin là một liên kết cứng không?


16

Tôi bắt đầu sử dụng các liên kết cứng thay vì các liên kết tượng trưng để tổ chức các tệp ...

Tôi đã làm điều này cho những bức ảnh tôi chụp để phân loại chúng cũng như chỉ ra những bức nào tôi muốn in, v.v.

Tôi đang sử dụng git để sao lưu hình ảnh của mình và có vẻ như git nghĩ rằng chúng là các tệp mới khi kho lưu trữ có kích thước khoảng 1GB. Git thực sự rất tốt trong việc phát hiện đổi tên nếu tôi không sử dụng git để đổi tên tệp, nhưng nó cũng xử lý các liên kết cứng?

Walter


2
Tất cả các tập tin bình thường là liên kết cứng. Có lẽ bạn có nghĩa là "tập tin với nhiều liên kết cứng"?
Ignacio Vazquez-Abrams

Vâng, đó là những gì tôi có ý nghĩa.
Walter

1
Chỉnh sửa cho tôi nếu tôi sai, nhưng không git thêm theo dõi content? Tại sao nó lại quan trọng nếu các tệp có cùng một nội dung, sau đó - xét cho cùng, về mặt kỹ thuật chúng là cùng một tệp.
new123456

1
Đối với những người vấp phải điều này - có lẽ nên xem xét sử dụng các liên kết tượng trưng thay thế? stackoverflow.com/q/954560/492
CAD bloke

Có vẻ như bạn muốn một hệ thống tập tin dựa trên thẻ.
Nayuki

Câu trả lời:


14

Các tệp được theo dõi được liên kết nhiều lần sẽ không khiến kho lưu trữ đối tượng của Git tăng lên nhiều vì mỗi liên kết sẽ được đại diện bởi cùng một đối tượng blob. Cây làm việc của bạn, tuy nhiên, có thể sẽ phát triển do các liên kết bị hỏng.

Git không theo dõi xem các tập tin cây làm việc được theo dõi, liên kết cứng đến cùng một tập tin.

Git sẽ để lại các tệp cây làm việc được liên kết, theo dõi, làm việc nhiều lần nếu bạn không yêu cầu nó làm bất cứ điều gì liên quan đến sửa đổi nội dung tại các tên đường dẫn đó hoặc xóa các mục nhập thư mục của tên đường dẫn. Nhưng, nếu bạn đã (ví dụ) kiểm tra một cam kết hoặc chi nhánh cũ và sau đó chuyển trở lại chi nhánh / cam kết gần đây nhất, thì Git sẽ kết thúc việc phá vỡ các liên kết cứng (thay thế các tên đường dẫn bị ảnh hưởng bằng mới (nhưng giống hệt ) thay vì tạo lại tình huống liên kết nhiều lần của bạn).

Để khôi phục trạng thái được liên kết nhiều lần của bạn, bạn có thể viết chương trình để quét các tệp giống hệt nhau và gửi lại chúng cho bất kỳ một trong các tệp. Một hoạt động khác như thế này có thể phức tạp hơn nếu tất cả các liên kết không nằm trong chính cây hoạt động hoặc, ít nhất, không phải ở một vị trí nào đó bên ngoài dễ nhận biết của (bên ngoài) Các tập tin ngẫu nhiên của các tập tin từ các thư mục nhà của bạn vào một kho lưu trữ của bản sao lưu và sử dụng Git để sửa đổi cây làm việc).

Ý tưởng đã xuất hiện trong danh sách gửi thư của Git:


Đối với các linux dựa trên debian, có công cụ hardlink ( tests.debian.org/search?keywords=hardlink ) có thể thực hiện thao tác này. thật không may, nó không nhanh lắm
Daniel Alder

Tôi chạy hardlinknhư một công việc hàng đêm trên /var/lib/jenkins.
Amedee Van Gasse 11/03/19
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.