rsync - удаление не работает, если ввод для файлов дается git ls-files
Это для синхронизации двух репозиториев git, один из которых является оригинальным, а другой - резервной версией 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), поэтому он не работает должным образом.
Мне нужно, чтобы оба хранилища были синхронизированы должным образом.