Thư mục Rsync trong khi các tệp --exclude-from'ing .gitignore ở các độ sâu khác nhau


8

Vì vậy, tôi đang cố gắng thực hiện một lệnh để rsync một thư mục nguồn có cấu trúc như vậy:

- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore

.Gitignore đầu tiên sẽ có một loạt các tệp bị bỏ qua. Công cụ điển hình. Thứ hai sẽ trông như sau:

*
!.gitignore

Kỹ thuật này được sử dụng khi bạn muốn kiểm tra trong một thư mục không có tệp nào bên trong. Cũng có thể có nhiều .gitignores trong toàn thư mục - đây chỉ là một kịch bản. Vì vậy, câu hỏi của tôi là: Có thể làm cho rsync diễn giải tất cả .gitignores liên quan đến thư mục họ đang ở không?

Nỗ lực ban đầu của tôi là như sau:

  1. Glob tất cả .gitignores trong thư mục.
  2. Xây dựng lệnh trông giống như:

rsync --exclude-from=.gitignore --exclude-from=src/logs/.gitignore --exclude-from=some/other/folder/.gitignore [source] [destination]

Tuy nhiên, điều này đã không làm việc như mong đợi đối với tôi. Mọi thứ đang bị bỏ qua vì nó đang đọc tất cả các tệp .gitignore như thể chúng ở gốc. Có cách nào khả thi để làm điều này mà không phải grep cho tất cả .gitignores và tạo một tệp chủ với các đường dẫn được viết lại tất cả liên quan đến thư mục gốc không?

Cảm ơn!

Câu trả lời:


15

Điều này nói với rsync để tìm trong mỗi thư mục cho một tệp .gitignore:

rsync --filter='dir-merge,-n /.gitignore' [...]

Điều đó nên làm những gì bạn muốn.

Các -nsau khi dir-mergephương tiện đó ( -) các tập tin quy định cụ thể chỉ không bao gồm và ( n) quy tắc không được thừa kế bởi các thư mục con.


Đây là một câu trả lời tuyệt vời. Cảm ơn bạn. Tôi sẽ +1 bạn nếu tôi có thể.
Jeff Howard
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.