Tối ưu hóa một repo git, chứa các tệp nhị phân lớn


21

Dự án của chúng tôi có dung lượng khoảng 11GB, 10 trong số đó là dữ liệu nhị phân (hình ảnh .png). Do đó, một git diffhoặc các git statushoạt động mất hơn một phút. May mắn là tất cả các tệp dữ liệu được tách thành một thư mục với tên tuyệt vời data. Nhiệm vụ là "Tránh nén, khuếch tán và các hoạt động tốn kém khác trên các tệp nhị phân."

  • Nó được coi là chia dự án thành hai repos. Sau đó datasẽ là một repo bên ngoài, được kiểm tra bởi repo mã nguồn chính. Nó đã được quyết định rằng chi phí chung của việc giữ các repos đồng bộ sẽ là quá nhiều, đặc biệt là đối với các nghệ sĩ, những người làm việc với các tệp dữ liệu.

  • Nói rõ ràng git những tệp đó là nhị phân , loại trừ các tệp từ diffs đã được xem xét, nhưng những tệp đó dường như chỉ là một giải pháp một phần cho câu hỏi.

Tôi cảm thấy rằng các thuộc tính git là giải pháp, nhưng làm thế nào? Hoặc có một kiến ​​trúc tốt hơn một repo nguyên khối?


1
Câu hỏi lớn đầu tiên ở đây là tầm quan trọng của những tệp dữ liệu đó. Chương trình của bạn có cần tất cả những hình ảnh có sẵn để làm bất cứ điều gì hữu ích không, hoặc nó có thể thoát khỏi một tập hợp nhỏ trong quá trình phát triển / thử nghiệm điển hình không?
Ixrec 11/03/2016

@Ixrec, hình ảnh thực sự quan trọng hơn mã nguồn. Tất cả chúng phải có mặt và tổng kiểm tra .png luôn được kiểm tra cho các tệp bị hỏng.
Vorac

1
Tại sao câu hỏi này không bị tràn? Q. Có vẻ hoàn toàn phù hợp với nó.
spirc

@spirc câu hỏi này nằm giữa dòng "trợ giúp với công cụ phần mềm" có chủ đề tại SO và "chiến lược kiểm soát phiên bản" có chủ đề ở đây. Vì nó không yêu cầu lệnh git nào thực thi để làm một cái gì đó, nên nó không rõ ràng về phía SO của dòng nên tôi đã bỏ phiếu để nó mở ở đây.

@Snowman cảm ơn đã phản hồi. Mục nào trong danh sách theo chủ đề phù hợp với? lập trình
viên.stackexchange.com / help / on

Câu trả lời:


18

Bạn có thể sử dụng git-lfs hoặc các công cụ tương tự (git-fat, git-annex, v.v.). Những công cụ đó về cơ bản thay thế các tệp nhị phân trong repo của bạn bằng tệp văn bản nhỏ bằng băm và lưu trữ dữ liệu nhị phân thực tế theo cách không phải là git - như chia sẻ mạng.

Làm cho khác biệt và mọi thứ đều cực nhanh khi chỉ có băm được so sánh, và - ít nhất là đối với git-lfs - trong suốt đối với người dùng (sau khi cài đặt một lần).

Afaik git-lfs được hỗ trợ bởi github, gitlab, VisualStudio và là nguồn mở.


2
Bạn đã thử sử dụng git-lfstrên một dự án có nhiều gigabyte tài sản với nhóm nhà phát triển / nghệ sĩ hỗn hợp chưa? Tôi muốn biết liệu mọi người có sử dụng git-lfs cho các dự án như trò chơi và hoạt hình không. Vì nó vẫn còn khá mới tại thời điểm viết. Từ kinh nghiệm của riêng tôi các rào cản nhập cảnh để git cho người dùng ít kỹ thuật là đã rất cao, do đó, có thêm một lớp để quản lý tập tin trên đầu trang của nó - có thể gây khó khăn cho người sử dụng, trừ khi họ đang đã cảm thấy thoải mái với git.
ideaman42 15/03/2016

Chỉ cho tối đa khoảng 1GB dữ liệu, xin lỗi. Nhưng git-lfs không nên thêm các bước bổ sung cho endusers, nó phải hoàn toàn trong suốt.
kat0r

Đây dường như là câu trả lời chính xác, nếu một số vấn đề phát sinh trong quá trình tích hợp tôi sẽ báo cáo lại ở đây. Vì vậy, thủ tục cài đặt chỉ cần được hoàn thành một lần trên máy chủ chứ không phải trên mỗi máy khách?
Vorac

Afaik bạn cũng cần cài đặt một addin máy khách nhỏ, kiểm tra trang github. Nhưng điều đó sẽ dễ dàng đưa ra với chính sách nhóm / đơn giản hơn bất kỳ phương án nào.
kat0r

1

Sử dụng cả repos GIT & SVN

Nếu các tệp nhị phân có thể được tách biệt một cách hợp lý khỏi nguồn, bạn có thể xem xét sử dụng git cho các tệp văn bản và không phải DVCS như lật đổ cho các tệp nhị phân.

Một dự án tôi thực hiện điều này vì chúng tôi có nhiều GB cho các thư viện được biên dịch (cho các phụ thuộc OSX / Win32), mà chúng tôi cần phải giữ phiên bản.


Mặt khác, nếu bạn có người dùng không có kỹ thuật, sử dụng hai hệ thống kiểm soát phiên bản có thể có vấn đề. Tuy nhiên, nếu các nghệ sĩ không làm việc với mã, bạn có thể cung cấp một tập lệnh để thực hiện cập nhật và họ có thể sử dụng lật đổ để cam kết tài sản nhị phân.

Sử dụng SVN (với git svn)

Mặc dù sự đánh đổi này không phải lúc nào cũng tốt cho các nhà phát triển đã quen sử dụng git thông thường, bạn có thể sử dụng SVN cho kho lưu trữ chính và nhà phát triển có thể sử dụng git svncác công cụ.

Điều này giúp công việc của các nhà phát triển sử dụng git trở nên hiệu quả hơn một chút, nhưng có nghĩa là đối với mọi người không quen thuộc với DVCS (hay nói chung là VCS) - họ có thể sử dụng mô hình đơn giản của SVN mà không phải sử dụng nhiều hệ thống kiểm soát phiên bản phức tạp.


git-lfs cũng là một lựa chọn, nhưng tôi đã không sử dụng nó nên không thể nói nó hoạt động tốt như thế nào.

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.