そのため、次のような構造でソースフォルダを再同期するコマンドを使用しようとしています。
- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore
最初の.gitignoreはファイルのリストを無視します。典型的なもの。 2番目は次のとおりです。
*
!.gitignore
この手法は、ファイルのないディレクトリをチェックインしたい場合に使用できます。ディレクトリ全体にもっと.gitignoresがあるかもしれません。これは1つのケースにすぎません。だから私の質問は:rsyncにそのディレクトリに関連するすべての.gitignoresを解釈させることができますか?
私の最初の試みは次のとおりです。
- ディレクトリ内のすべての.gitignoreをグローバルに表示します。
- ビルドコマンドは次のとおりです。
rsync --exclude-from=.gitignore --exclude-from=src/logs/.gitignore --exclude-from=some/other/folder/.gitignore [source] [destination]
しかし、これは私に望む効果をもたらさなかった。すべての.gitignoreファイルがルートディレクトリにあるかのように読み取られるため、すべては無視されます。すべての.gitignoresをgrepし、書き換えられたパスがすべてルートディレクトリに相対的なデフォルトファイルを作成せずにこれを行う方法はありますか?
ありがとうございます!
ベストアンサー1
これはrsyncに各ディレクトリでファイルを見つけるように指示します.gitignore
。
rsync --filter='dir-merge,-n /.gitignore' [...]
それからあなたが望むようになります。
-n
以下は、dir-merge
(-
)ファイルが除外のみを指定し、(n
)ルールがサブディレクトリに継承されないことを示しています。