Rsync menyertakan opsi bagus --cvs-exclude
untuk "mengabaikan file dengan cara yang sama seperti CVS", tetapi CVS sudah usang selama bertahun-tahun. Apakah ada cara untuk membuatnya juga mengecualikan file yang akan diabaikan oleh sistem kontrol versi modern (Git, Mercurial, Subversion)?
Misalnya, saya memiliki banyak proyek Maven yang diperiksa dari GitHub. Biasanya mereka menyertakan .gitignore
daftar setidaknya target
, direktori build Maven default (yang mungkin ada di tingkat atas atau di submodul). Karena isi dari direktori ini sepenuhnya dapat dibuang, dan mereka bisa jauh lebih besar dari kode sumber, saya ingin mengecualikannya saat menggunakan rsync untuk backup.
Tentu saja saya bisa secara eksplisit --exclude=target/
tetapi itu akan secara tidak sengaja menekan direktori yang tidak terkait yang kebetulan diberi nama target
dan tidak seharusnya diabaikan.
Dan saya bisa memasok daftar lengkap path absolut untuk semua nama file dan pola disebutkan dalam .gitignore
, .hgignore
atau svn:ignore
properti pada disk saya, tetapi ini akan menjadi daftar besar yang harus diproduksi oleh semacam script.
Karena rsync tidak memiliki dukungan bawaan untuk pemeriksaan VCS selain CVS, apakah ada trik bagus untuk memberinya pola pengabaian mereka? Atau sejenis sistem panggilan balik di mana skrip pengguna dapat ditanyai apakah file / direktori tertentu harus disertakan atau tidak?
Pembaruan : --filter=':- .gitignore'
seperti yang disarankan oleh LordJavac tampaknya berfungsi dengan baik untuk Git seperti --filter=:C
halnya untuk CVS, setidaknya pada contoh yang saya temukan, meskipun tidak jelas apakah sintaksnya sama persis. --filter=':- .hgignore'
tidak bekerja dengan baik untuk Mercurial; misalnya sebuah .hgignore
baris yang mengandung seperti ^target$
(Mercurial equivalent dari Git /target/
) tidak dikenali oleh rsync sebagai ekspresi reguler. Dan sepertinya tidak ada yang berhasil untuk Subversion, yang harus Anda parse .svn/dir-prop-base
untuk copy pekerjaan 1.6 atau sebelumnya, dan angkat tangan Anda dengan cemas untuk copy pekerjaan 1.7 atau yang lebih baru.
:-
artinya? Apa maksud dari titik dua? Apa dasbornya?
check-ignore
subperintah yang dapat menangani kerja keras parsing berbagai file "abaikan", jika Anda ingin menggunakan opsi "buat daftar semua file yang tidak diabaikan". Jawaban saya di sini memberikan detail bagaimana melakukan itu.