Rsync には--cvs-exclude
「CVS と同じようにファイルを無視する」ための気の利いたオプションが含まれていますが、CVS は何年も前から廃止されています。最新のバージョン管理システム (Git、Mercurial、Subversion) によって無視されるファイルも除外する方法はありますか?
たとえば、GitHub からチェックアウトした多数の Maven プロジェクトがあります。通常、それらには、.gitignore
少なくともtarget
デフォルトの Maven ビルド ディレクトリ (トップ レベルまたはサブモジュールに存在する可能性があります) のリストが含まれます。これらのディレクトリの内容は完全に使い捨てであり、ソース コードよりもはるかに大きくなる可能性があるため、バックアップに rsync を使用する場合はそれらを除外したいと考えています。
もちろん、私は明示的にできます--exclude=target/
が、たまたま名前が付けられtarget
、無視されるべきではない無関係なディレクトリを誤って抑制してしまいます。
.gitignore
また、ディスク上の任意の 、.hgignore
、またはプロパティで言及されているすべてのファイル名とパターンの絶対パスの完全なリストを提供することもできますsvn:ignore
が、これはある種のスクリプトで作成する必要がある膨大なリストになります。
rsync には CVS 以外の VCS チェックアウトのサポートが組み込まれていないため、無視パターンを与えるための良いトリックはありますか? または、特定のファイル/ディレクトリを含めるかどうかをユーザースクリプトに尋ねることができる、ある種のコールバックシステムですか?
更新: LordJavac が示唆するように、少なくとも私が見つけた例では、CVS--filter=':- .gitignore'
と同様に Git でも機能するようですが、構文が完全に一致しているかどうかは不明です。Mercurial ではうまく機能しません。たとえば、(Git に相当する Mercurial の) のような行を含む は、rsync によって正規表現として認識されません。また、Subversion では何も機能しないようです。この場合、1.6 以前の作業コピーを解析する必要があり、1.7 以降の作業コピーを取得するには落胆して手を投げ出さなければなりません。--filter=:C
--filter=':- .hgignore'
.hgignore
^target$
/target/
.svn/dir-prop-base