Folder Rsync sementara --exclude-from'ing file .gitignore pada kedalaman berbeda

8

Jadi saya mencoba mengerjakan perintah untuk rsync folder sumber dengan struktur seperti ini:

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

.Gitignore pertama akan mengabaikan serangkaian file. Hal-hal yang khas. Yang kedua akan terlihat seperti berikut:

*
!.gitignore

Teknik ini digunakan ketika Anda ingin memeriksa dalam direktori dengan tidak ada file di dalamnya. Mungkin ada lebih banyak .gitignores di seluruh direktori - ini hanya satu skenario. Jadi pertanyaan saya adalah ini: Apakah mungkin untuk membuat rsync menginterpretasikan semua .gitignores relatif terhadap direktori tempat mereka berada?

Upaya awal saya adalah sebagai berikut:

  1. Glob semua .gitignores di direktori.
  2. Bangun perintah yang terlihat seperti:

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

Namun, ini tidak berhasil seperti yang diharapkan untuk saya. Semuanya diabaikan karena membaca semua file .gitignore seolah-olah mereka di root. Apakah ada cara yang mungkin untuk melakukan ini tanpa harus grep untuk semua .gitignores dan membuat satu file master dengan path yang ditulis ulang semua relatif terhadap direktori root?

Terima kasih!

Jeff Howard
sumber

Jawaban:

15

Ini memberitahu rsync untuk mencari di setiap direktori untuk suatu file .gitignore:

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

Itu harus melakukan apa yang Anda inginkan.

The -nsetelah dir-mergeberarti bahwa ( -) file menspesifikasikan hanya tidak termasuk dan ( n) aturan tidak diwarisi oleh subdirektori.

Wurtel
sumber
Ini jawaban yang bagus. Terima kasih. Saya akan memberi Anda +1 jika saya bisa.
Jeff Howard