2010-03-03 35 views
7

Tôi muốn git sao chép một kho lưu trữ svn ngoại trừ một thư mục trong thư mục gốc của svn.git svn clone ngoại trừ một thư mục cụ thể

Tôi làm cách nào?

tôi có thể làm git svn clone svnrepo/dir/sb-dir/ nếu tôi chỉ sb-dir cần thiết nhưng tôi cần tất cả các thư mục (và các tập tin) trong dir trừ design thư mục

Trả lời

3

Nếu bạn đang sử dụng latest Git1.7.0, nó cung cấp một thưa thớt thanh toán tính năng.

tính năng "thanh toán thưa thớt" chỉ cho phép một phần cây công việc được kiểm tra.

Xem Git Sparse Checkout SO question để biết thêm: bạn vẫn cần phải clone tất cả repo, nhưng bạn có thể kiểm (tức là điền cây làm việc của bạn) chỉ với các bộ phận của repo nhân bản)


duy nhất cách khác sẽ biến đổi design dưới dạng mô-đun con.
Khi GitPro book mentions:

hỗ trợ submodule Git cho phép một kho chứa, như một thư mục con, một kiểm tra của một dự án bên ngoài.
Mô-đun con duy trì nhận dạng riêng của chúng; hỗ trợ submodule chỉ lưu trữ vị trí lưu trữ submodule và ID cam kết, vì vậy các nhà phát triển khác nhân bản dự án có chứa ("superproject") có thể dễ dàng sao chép tất cả các mô-đun con tại cùng một bản sửa đổi.
Kiểm tra một phần của siêu dự án là có thể: bạn có thể yêu cầu Git sao chép không, một số hoặc tất cả các mô-đun con.

submodule là cách duy nhất tôi biết để đạt được "nhân bản một phần", vì n trường hợp của bạn nó là phần nhân bản đó là vấn đề.
Từ nhận xét của bạn:

vấn đề của tôi là thư mục thiết kế là 700 mb; và phải mất hàng giờ để git svn clone. Toàn bộ phần còn lại của dự án đặt lại với nhau là 10s của mb.

Nhưng điều đó có nghĩa là sửa đổi repo SVN, để cô lập design như một tài liệu tham khảo "bên ngoài", sau đó git svn clone và thêm trong Git nhân bản repo một tham chiếu submodule.

+1

Cảm ơn! Nhưng vấn đề của tôi là thư mục thiết kế là 700 mb; và phải mất hàng giờ để git svn clone. Toàn bộ phần còn lại của dự án đặt lại với nhau là 10s của mb. Đó là sai lầm ở nơi đầu tiên tôi biết, để đặt nó trong repo. Nhưng tôi muốn một số cách lành mạnh để đối phó tại địa phương bằng cách sử dụng git. Không có vẻ như có thể, sau đó –

+0

@ becomingGuru: cách lành mạnh sẽ là để phân chia mà repo và cô lập thiết kế trong repo riêng của mình, tham chiếu như là một submodule. Bằng cách đó, bạn sẽ đạt được * chính xác * những gì bạn đang tìm kiếm. Xem http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository – VonC

2

Bạn có thể sử dụng tùy chọn --ignore-paths=<regex> để git svn init hoặc git svn fetch hoặc thêm tùy chọn cấu hình svn-remote.<name>.ignore-paths thành .git/config. Đây là tài liệu là "Điều này cho phép một để chỉ định một biểu thức chính quy Perl sẽ gây ra bỏ qua tất cả các đường dẫn phù hợp từ thanh toán từ SVN." Tìm kiếm số manual cho "bỏ qua đường dẫn" để biết thêm chi tiết.

Sau khi thử nghiệm trong this answer, tôi đã học được rằng regex dường như được áp dụng cho đường dẫn đầy đủ của từng thư mục hoặc tệp từ thư mục gốc của kho lưu trữ. Do đó, nếu bạn có bố cục kho chuẩn và muốn loại trừ cùng một thứ từ mỗi thân cây/chi nhánh/thẻ, bạn có thể sử dụng một regex như ^(trunk|((branches|tags)/[^/]+))(<file-to-ignore>|<other-file-to-ignore>).

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