Rsync, --cvs-exclude
"CVS'nin yaptığı gibi dosyaları yok saymak" için şık bir seçenek içeriyor , ancak CVS yıllardır kullanılmıyor. Modern sürüm kontrol sistemleri (Git, Mercurial, Subversion) tarafından yok sayılacak dosyaları da dışarıda bırakmanın bir yolu var mı?
Örneğin, GitHub'dan kontrol ettiğim birçok Maven projem var. Tipik olarak, .gitignore
en azından bir liste içerirler target
, varsayılan Maven derleme dizini (en üst düzeyde veya alt modüllerde mevcut olabilir). Bu dizinlerin içerikleri tamamen tek kullanımlık olduğundan ve kaynak koddan çok daha büyük olabileceğinden, yedeklemeler için rsync kullanırken bunları dışlamak istiyorum.
Elbette açıkça yapabilirim, --exclude=target/
ancak bu, yalnızca adlandırılmış olan target
ve göz ardı edilmemesi gereken ilgisiz dizinleri yanlışlıkla bastıracaktır .
Ve hiç belirtilen tüm dosya isimleri ve modelleri için mutlak yollar tam bir listesini kaynağı olabilir .gitignore
, .hgignore
ya da svn:ignore
benim diskte mülkiyet, ancak bu senaryo çeşit üretilen gerekecekti büyük liste olurdu.
Rsync'in CVS dışında VCS kontrolleri için yerleşik bir desteği olmadığından, onu görmezden gelme modellerini beslemek için iyi bir numara var mı? Veya bir kullanıcı komut dosyasının belirli bir dosya / dizinin dahil edilip edilmeyeceğinin sorulabileceği bir tür geri arama sistemi?
Güncelleme : --filter=':- .gitignore'
LordJavac tarafından önerildiği gibi --filter=:C
, en azından bulduğum örneklerde CVS'de olduğu gibi Git için de işe yarıyor gibi görünüyor , ancak sözdiziminin tam olarak eşleşip eşleşmediği belirsiz. --filter=':- .hgignore'
Mercurial için pek iyi çalışmıyor; Örneğin (Git'in Mercurial eşdeğeri ) .hgignore
gibi bir satır içeren bir satır , rsync tarafından düzenli bir ifade olarak tanınmaz. Ve hiçbir şey Subversion için işe yaramıyor gibi görünüyor, bunun için 1.6 veya daha önceki bir çalışma kopyası için ayrıştırmanız ve 1.7 veya sonraki bir çalışma kopyası için ellerinizi dehşet içinde kaldırmanız gerekir .^target$
/target/
.svn/dir-prop-base
:-
Tam olarak ne anlama geliyor? Kolon ne anlama geliyor? Ne çizgi?
check-ignore
"göz ardı edilmeyen tüm dosyaların bir listesini oluştur" seçeneğiyle gitmek istiyorsanız, çeşitli "yok sayma" dosyalarını ayrıştırmanın zor işleriyle başa çıkabilecek bir alt komuta sahiptir . Buradaki cevabım bunun nasıl yapılacağına dair ayrıntılar veriyor.