rsync --delete如果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文件输出单个文件名而不是目录,因此目标端不知道已删除的文件。 因此,我尝试了
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)中,因此无法按预期工作。
我需要两个存储库都应该正确同步。