我的情况如下:我有多台客户端计算机(即客户端 1、客户端 2、客户端 3),我想让某个文件夹(“/code”)在所有计算机上保持同步。目前,我在单独的服务器上设置了一个 rsync 脚本来保持文件同步。即,在服务器上,我执行如下操作:
# Step 1: update/copy all files from each client to the server
rsync -vrtu client1:/code/ /code
rsync -vrtu client2:/code/ /code
rsync -vrtu client3:/code/ /code
# Step 2: synchronize each client with the server
rsync -vrtu /code/ client1:/code
rsync -vrtu /code/ client2:/code
rsync -vrtu /code/ client3:/code
我使用 cron 运行它,它会将一台机器上的任何文件更新传播到所有机器。问题是删除不会传播。此外,如果我正确理解了 rsync --delete 选项,似乎使用 --delete 会阻止我的客户端的任何新文件添加到服务器。对吗?我只想让我的所有三个客户端上的文件完全同步(添加、删除和修改)。有没有一种简单的方法可以使用 rsync 来实现我想要的效果?
答案1
将 --delete 添加到 rsync 中,将删除接收端的文件。因此,步骤 2 中将没有任何内容需要同步。客户端上的所有新文件都将消失。Rsync --delete 将仅针对正在 rsync 的目录。
您可以使用多个目录。即,为客户端上的新文件使用专用目录。
对于这种代码同步,您还应该考虑使用 git 之类的版本控制系统。这样,如果客户端上的文件发生更改,您就可以获得更清晰的合并。您可以回滚、使用多个不同的分支、查看谁更改了什么等等。
在 git 中,您可以使用 post-receive 钩子来实现这一点,并将当前分支检出到您的工作目录。