
そこで、次のような構造のソース フォルダーを rsync するコマンドを作成しようとしています。
- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore
最初の .gitignore には無視される一連のファイルが含まれます。典型的なものです。2 番目は次のようになります。
*
!.gitignore
この手法は、ディレクトリ内にファイルがまったくない状態でチェックインする場合に使用します。ディレクトリ全体に .gitignore が複数存在する場合もありますが、これは 1 つのシナリオにすぎません。私の質問は次のとおりです。rsync に、すべての .gitignore を、それらが保存されているディレクトリを基準にして解釈させることは可能ですか?
私の最初の試みは次の通りでした:
- ディレクトリ内のすべての .gitignores を glob します。
- ビルド コマンドは次のようになります。
rsync --exclude-from=.gitignore --exclude-from=src/logs/.gitignore --exclude-from=some/other/folder/.gitignore [source] [destination]
しかし、これは私の場合期待通りには機能しませんでした。すべての .gitignore ファイルをルートにあるかのように読み取っているため、すべてが無視されています。すべての .gitignore を grep せずに、ルート ディレクトリを基準にしてすべてのパスを書き換えた 1 つのマスター ファイルを作成し、これを実行する方法はあるでしょうか。
ありがとう!
答え1
これは、rsync に各ディレクトリでファイルを検索するように指示します.gitignore
。
rsync --filter='dir-merge,-n /.gitignore' [...]
そうすれば望みどおりになるはずです。
-n
の後の は、dir-merge
( -
) ファイルが除外のみを指定し、( n
) ルールがサブディレクトリに継承されないことを意味します。