問題タブ [git-ls-files]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - rsync --delete を使用してファイルが削除されない
ファイルの入力が git ls-files によって与えられた場合、rsync --delete は機能しません
これは、2 つの git リポジトリを同期するためのものです。1 つはオリジナルで、もう 1 つは rsync バックアップ バージョンです。
orig_repo で削除されるファイルを sync_repo で削除するなど、orig_repo のいくつかのサブディレクトリのファイルを sync_repo で同期する必要があります。
以下のコードは両方のディレクトリを同期します。唯一の問題は、ソース ディレクトリに存在しなくなった宛先のファイルを削除しないことです。
git ls-files -z sub_dir1/ sub_dir2/ | rsync --omit-dir-times --chmod=u+w --files-from=- -av0 source_repo/ destination_repo/
以下のように --delete フラグを追加しようとしました:
git ls-files -z sub_dir1/ sub_dir2/ | rsync --omit-dir-times --chmod=u+w --files-from=- -av0 --delete source_repo/ destination_repo/
それは動かなかった。その理由は、次のようにファイルを削除する場合です。
git rm file1
git ls-files は、ディレクトリではなく個々のファイル名を出力するため、削除されたファイルは宛先側には認識されません。したがって、私は試しました
find sub_dir1/ -type d -print | rsync --omit-dir-times --chmod=u+w --files-from=- -av0 --delete source_repo/ destination_repo/
すべてのファイルを destination_repo に同期しますが、特定のサブディレクトリ (sub_dir1、sub_dir2) には同期しないため、意図したとおりに機能しません。
両方のリポジトリを適切に同期する必要があります。