Kịch bảnGit có thể coi các tệp zip là các thư mục và tệp trong zip dưới dạng các đốm màu không?
Hãy tưởng tượng tôi buộc phải làm việc với một số tệp của tôi luôn được lưu trữ bên trong .zip
tệp. Một số tệp trong zip là các tệp văn bản nhỏ và thường xuyên thay đổi, trong khi các tệp khác lớn hơn nhưng may mắn thay vì tĩnh (ví dụ: hình ảnh).
Nếu tôi muốn đặt các tệp zip này trong kho lưu trữ git
, mỗi zip được coi là blob, vì vậy bất cứ khi nào tôi cam kết kho lưu trữ sẽ tăng kích thước của tệp zip ... ngay cả khi chỉ có một tệp văn bản nhỏ bên trong đã thay đổi!
Tại sao điều này là thực tế
MS Word 2007/2010 .docx
và Excel .xlsx
file là file ZIP ...
Những gì tôi muốn
Có, bởi bất kỳ cơ hội, cách để yêu cầu git
không coi zips là tệp, mà đúng hơn là thư mục và xử lý nội dung của chúng dưới dạng tệp?
Những lợi thế
- kích thước repo nhỏ hơn nhiều, ví dụ nhanh hơn chuyển/sao lưu
- Display changes with Git to zip's sẽ Automagically làm việc
Nhưng nó không thể làm việc, bạn nói gì?
Tôi nhận ra rằng không có siêu dữ liệu bổ sung sẽ dẫn đến một số sự mơ hồ: trên git checkout
git sẽ phải quyết định có tạo foo.zip/bar.txt
làm tệp trong thư mục thông thường hoặc tệp zip hay không. Tuy nhiên điều này có thể được giải quyết thông qua các tùy chọn cấu hình, tôi sẽ nghĩ.
Hai ý tưởng làm thế nào nó có thể được thực hiện (nếu nó chưa hề tồn tại)
- sử dụng một thư viện như
minizip
hayIO::Compress::Zip
bên git - bằng cách nào đó thêm một lớp hệ thống tập tin mà git thực xem các tệp zip dưới dạng thư mục để bắt đầu bằng
Kịch bản với '.docx 'các tệp có ý nghĩa, nhưng trong nhiều trường hợp khác, bạn có thể muốn xem xét việc theo dõi các tệp riêng lẻ thường với git và chỉ * xây dựng * kết quả' .zip' bằng cách sử dụng công cụ xây dựng thích hợp như 'make'. – pixelistik
Xét rằng hai tệp zip trông khác nhau có thể chứa cùng một dữ liệu giống nhau (ví dụ: tệp văn bản nén hai lần với hai mức nén khác nhau), điều này trở nên phức tạp hơn nhiều. Mặc dù dễ dàng thể hiện sự khác biệt giữa hai phiên bản của các tệp đã giải nén với ít thông tin, tôi đoán đại diện cho sự khác biệt giữa hai phiên bản của kho lưu trữ (về cơ bản những gì git phải làm) với ít thông tin sẽ không -không đáng kể. – HelloGoodbye
Bạn đã bao giờ kết thúc với một giải pháp thực hiện [câu trả lời của Jeff] (https://stackoverflow.com/a/8001900/321973) hay bất kỳ điều gì khác? Tôi đang tự hỏi về cơ bản giống nhau ngoại trừ [cho kho lưu trữ tar] (https://stackoverflow.com/q/37000849/321973), mà sẽ mang lại một câu trả lời tương thích ... –