2010-07-01 27 views
6

Tôi muốn một cái gì đó trong git tương tự như Mercurial's Bigfiles Extension (lưu ý: Tôi biết git-bigfiles, nhưng điều đó không liên quan).Git tương tự với phần mở rộng Bigfiles của Hg?

Về cơ bản tôi muốn lưu trữ các tệp nhị phân lớn trong kho lưu trữ git của mình, nhưng tôi không muốn nhận mọi phiên bản của nhị phân lớn khi tôi sao chép. Tôi chỉ muốn tải xuống các tệp nhị phân lớn khi tôi kiểm tra bản sửa đổi cụ thể chứa các tệp lớn đó.

Trả lời

5

Dưới đây là một vài lựa chọn để xem xét:

nông nhái: Bạn có thể thêm tham số --depth <depth> để git clone để có được một bản sao cạn của kho. ví dụ. nếu <depth> là 1, điều này có nghĩa là bản sao sẽ chỉ tìm nạp các tệp cần thiết cho lần commit gần đây nhất. Tuy nhiên, kho như vậy có những hạn chế vụng về những gì bạn có thể làm với họ, như được nêu trong trang git clone người đàn ông:

 
     --depth 
      Create a shallow clone with a history truncated to the specified 
      number of revisions. A shallow repository has a number of 
      limitations (you cannot clone or fetch from it, nor push from nor 
      into it), but is adequate if you are only interested in the recent 
      history of a large project with a long history, and would want to 
      send in fixes as patches. 

Trong thực tế, như đã thảo luận trong this thread đó là một cái gì đó của một lời nói quá - có những tình huống hữu ích mà đẩy từ một bản sao nông sẽ vẫn hoạt động, và nó có thể sẽ phù hợp với quy trình làm việc của bạn.

Phần mở rộng "git media" của Scott Chacon: tác giả mô tả câu trả lời này là this similar question và trong README trên github: http://github.com/schacon/git-media.

Submodules nông: bạn có thể giữ tất cả các tệp lớn trong kho lưu trữ git riêng biệt và thêm nó làm shallow submodule vào kho lưu trữ chính của bạn. Điều này sẽ có lợi thế là bạn không có những hạn chế của các bản sao nông cho mã của bạn, chỉ là kho lưu trữ với các tệp lớn.

Cũng có nhiều cách để thực hiện việc này bằng cách thêm các móc (ví dụ) rsync vào các tệp lớn của bạn từ git hooks, nhưng tôi cho rằng có lý do chính đáng là bạn muốn giữ các tệp này dưới sự kiểm soát của git ngay từ đầu.

Tôi hy vọng đó là một số trợ giúp.

+0

git-media trông chính xác những gì tôi muốn nhưng chưa hoàn tất. Tôi nghĩ rằng tôi đã nhận nó làm việc với một chút hack mặc dù. Bây giờ tôi chỉ cần viết mã để hỗ trợ tải các tệp lên nơi tôi muốn chúng đi. – davr

+0

Để tham khảo trong tương lai, đây là ngã ba của tôi về git-media với một số thay đổi cần thiết: http://github.com/davr/git-media – davr

+0

Tuyệt vời, trông rất hữu ích! Cũng giống như một điểm quan tâm khác, chủ đề ở đây (và đặc biệt là các trang được liên kết đến trong thư đầu tiên) rất thú vị về chủ đề của git đối phó với các tệp lớn http://git.661346.n2.nabble.com/Git-and -Media-repositories-td1446700.html –

Các vấn đề liên quan