rsyncを使用して.gitignoredファイルを削除する

rsyncを使用して.gitignoredファイルを削除する

.gitignore設定のため、gitが無視するすべてのファイルを無視しながら、ローカルディレクトリを可能なリモートディレクトリと同期させるためにrsyncを頻繁に使用する必要があります。

これを行うには、現在のgitレプリケーションに関連するすべてのファイルをリストし、rsyncにパイプします。

cd $source
{ git ls-files -coz --directory --exclude-standard
  printf '.git\0'
} | rsync --info=progress2 -ar0 --files-from=- ./ "$destination"

構文解析を git 自体に任せ、ファイルのリストを rsync にパイピングすると、私が依存するいくつかの利点があります。

  • ファイルを無視するパターンは非常に複雑になる可能性があり、!inverse-pattern-to-includersyncがこの構文で理解できない否定()を含めることができます。
  • .gitignoreまた、サブディレクトリにあるファイルも考慮してください。 Rsyncのmerge-dirフィルタは、インクルードと除外の順序がrsyncにとって重要であるため、これがリファクタリングされるのを正確に許可しません。
  • .git/info/excludeグローバル git 設定ファイルも考慮されます。
  • gitリポジトリを初期化せずに動作します。 gitを使用してgitリポジトリを指すだけです--git-dir
  • リポジトリは非常に大きくなる可能性があるため、すべての関連ファイルをrsync--filter --excludeまたは--includemodeに指定すると、コマンドラインの制限が壊れたり、rsyncの速度が著しく遅くなる可能性があります。これはを使用して--files-from防ぐことができます。

これで、欠落または除外されたすべてのファイルを--del削除するためにrsyncフラグをサポートするように、このコードスニペットを改善する必要があります。残念ながら、それはうまく再生されません。両端のファイルリストを再比較せずに可能ですか?$destination$source--files-from

ベストアンサー1

おすすめ記事