異なる深さで.gitignoreファイルを--exclude-fromしている間のRsyncフォルダー


8

だから私は次のような構造を持つソースフォルダーをrsyncするコマンドに取り組んでいます:

- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore

最初の.gitignoreは一連のファイルを無視します。典型的なもの。2番目は次のようになります。

*
!.gitignore

この手法は、ファイルが含まれていないディレクトリをチェックインする場合に使用されます。ディレクトリ全体に.gitignoreがさらに存在する場合もあります-これは1つのシナリオにすぎません。だから私の質問はこれです:rsyncがすべての.gitignoresをそれらが置かれているディレクトリに相対的に解釈させることは可能ですか?

私の最初の試みは次のとおりでした:

  1. ディレクトリ内のすべての.gitignoresを取得します。
  2. 次のようなビルドコマンド:

rsync --exclude-from=.gitignore --exclude-from=src/logs/.gitignore --exclude-from=some/other/folder/.gitignore [source] [destination]

ただし、これは期待どおりに機能しませんでした。すべての.gitignoreファイルがルートにあるかのように読み込まれるため、すべてが無視されます。すべての.gitignoresに対してgrepを実行せずに、ルートディレクトリからの相対パスをすべて再書き込みしたマスターファイルを1つ作成することなく、これを行う方法はありますか?

ありがとう!

回答:


15

これは、rsyncに各ディレクトリでファイルを探すように指示します.gitignore

rsync --filter='dir-merge,-n /.gitignore' [...]

それはあなたが望むことをするはずです。

-ndir-mergeは、(-)ファイルが除外のみを指定し、(n)ルールがサブディレクトリに継承されないことを意味します。


これは素晴らしい答えでした。ありがとうございました。できれば+1します。
ジェフハワード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.