Rsync bao gồm một tùy chọn tiện lợi --cvs-exclude
để "bỏ qua các tệp theo cách giống như CVS", nhưng CVS đã lỗi thời trong nhiều năm. Có cách nào để làm cho nó cũng loại trừ các tệp sẽ bị bỏ qua bởi các hệ thống kiểm soát phiên bản hiện đại (Git, Mercurial, Subversion) không?
Ví dụ: tôi có rất nhiều dự án Maven được kiểm tra từ GitHub. Thông thường, chúng bao gồm .gitignore
ít nhất một danh sách target
, thư mục xây dựng Maven mặc định (có thể có ở cấp cao nhất hoặc trong các mô-đun con). Vì nội dung của các thư mục này hoàn toàn dùng một lần và chúng có thể lớn hơn nhiều so với mã nguồn, tôi muốn loại trừ chúng khi sử dụng rsync để sao lưu.
Tất nhiên tôi có thể rõ ràng --exclude=target/
nhưng điều đó sẽ vô tình ngăn chặn các thư mục không liên quan chỉ tình cờ được đặt tên target
và không được phép bỏ qua.
Và tôi có thể cung cấp một danh sách đầy đủ các đường dẫn tuyệt đối cho tất cả các tên tập tin và các mẫu nêu tại bất kỳ .gitignore
, .hgignore
hoặc svn:ignore
tài sản trên đĩa của tôi, nhưng đây sẽ là một danh sách rất lớn mà có thể có được sản xuất bởi một số loại kịch bản.
Vì rsync không có hỗ trợ tích hợp cho các kiểm tra VCS ngoài CVS, có mẹo hay nào để cung cấp cho nó các mẫu bỏ qua của họ không? Hoặc một số loại hệ thống gọi lại, theo đó một kịch bản người dùng có thể được hỏi liệu một tệp / thư mục nhất định có nên được đưa vào hay không?
Cập nhật : --filter=':- .gitignore'
theo đề xuất của LordJavac dường như hoạt động tốt cho Git cũng như --filter=:C
cho CVS, ít nhất là trên các ví dụ tôi đã tìm thấy, mặc dù không rõ liệu cú pháp có khớp chính xác hay không. --filter=':- .hgignore'
không hoạt động rất tốt cho Mercurial; ví dụ: một .hgignore
chứa một dòng như ^target$
(tương đương Mercurial của Git /target/
) không được rsync nhận dạng là một biểu thức chính quy. Và dường như không có gì hoạt động đối với Subversion, mà bạn sẽ phải phân tích cú pháp .svn/dir-prop-base
cho một bản sao làm việc 1.6 hoặc cũ hơn, và thất vọng đối với bản sao làm việc 1.7 hoặc mới hơn.
:-
có nghĩa là chính xác? Dấu hai chấm có nghĩa là gì? Dấu gạch ngang là gì?
check-ignore
lệnh con có thể giải quyết công việc khó phân tích cú pháp các tệp "bỏ qua" khác nhau, nếu bạn muốn đi với tùy chọn "tạo danh sách tất cả các tệp không bị bỏ qua". Câu trả lời của tôi ở đây cung cấp chi tiết về cách làm điều đó.