权限更改后同步 git 存储库时,Rsync 不考虑时间戳

权限更改后同步 git 存储库时,Rsync 不考虑时间戳

我在机器 A 上有一个 git 仓库。

我使用标志从机器 A 到机器 B 进行了 rsync

rsync -zvaP  /media/shihab/development shihab@remote:/media/shihab/OSDisk/development

后来我在机器 B 上做了一些更改,并使用相同的标志从机器 B 到机器 A 进行了 rsync:

rsync -zvaP shihab@remote:/media/shihab/OSDisk/development /media/shihab/development 

在同步过程中,我发现即使没有修改的文件也被同步了。结果两次同步操作,文件所有者和权限都发生了更改。在存储库中执行 git status 会告诉我用户权限已更改。

为了纠正这个问题,我对 git config 全局和本地进行了更改,添加如下core.filemode=false

git config --global core.fileMode false
git config --local core.fileMode false

此外,我在同步中添加了标志,rsync -zvaP --no-perms --no-owner --no-group要求 rsync 忘记写入权限。例如:

rsync -zvaP --no-perms --no-owner --no-group /media/shihab/development shihab@remote:/media/shihab/OSDisk/development

然而,尽管发生了这种变化,当我从机器 B 到机器 A 进行 rsync 时,它会用机器 B 上具有较旧时间戳的文件覆盖具有较新时间戳的文件。如果我做一个,我就能看到它--dry-run -i。该文件在机器 B 上如下所示:

-rwxrwxrwx 1 shihab shihab 655 2021 年 11 月 16 日安装-i3wm.sh*

在机器 A 上,它看起来像:

-rwxrwxrwx 1 shihab shihab 681 六月 22 日 11:06 install-i3wm.sh*

当我从机器 B 到机器 A 进行 rsync 时,如下所示:

rsync -zvaP --dry-run -i -t --no-perms --no-owner --no-group shihab@remote:/media/shihab/OSDisk/development /media/shihab/development

我得到:

f+++++++++ install-i3wm.sh

我究竟做错了什么?

答案1

你这么说rsync正在用机器 B 上具有较旧时间戳的文件覆盖具有较新时间戳的文件”。

这两个文件不同,因此目标将更新以匹配源。就是这样rsync

如果您只想rsync在源比目标更新时更新文件,您需要告诉它这是您想要的修改行为。在这种情况下包括-u( --update)。

相关内容