如果文件的输入由 git ls-files 给出,rsync --delete 不起作用
这是用于同步两个 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),因此它不能按预期工作。
我需要两个存储库都应该正确同步。