乍一看,这似乎是一个简单的请求,但我相信这并不是因为我希望跟踪一些关键的细节。以下是场景:
我家用工作站上有一个目录,我将其克隆到便携式 1TB 硬盘上,以便在出差时随身携带,供我的笔记本电脑使用。这意味着我会在不同时间对家用副本和移动副本进行更改。这可能不仅包括更改文件,还包括创建、删除、重命名和移动文件。两台机器都运行最新的 Mountain Lion 版本。
简单同步(通过 rsync 或 unison)似乎不太合适,因为它们会将所有文件同步到两个位置。这意味着,如果我在路上删除了一个文件,并且希望在同步时该删除反映在我的本地副本中,那将不会发生,相反,之前删除的文件将重新出现在移动副本上。
无论如何,我需要一个足够智能的解决方案来识别已删除的文件/目录以及已重命名的文件/目录。这听起来像是我需要使用 SVN 来做的事情,但我从未在软件开发环境之外使用过它,因为软件开发环境已经为我设置好了一切。我不知道如何在自己的家庭环境中实现它。
有没有兼容 Mac OS X 的解决方案可以解决此问题?如果有,我将非常感激您能给我指明正确的方向。
答案1
如果我理解正确的话,您希望采取一个自动操作,开始比较目录修改日期,选择最近触及的目录,并使用此信息来确定谁要复制到另一个目录。
(这是判断文件是否存在于一侧的唯一方法,因为它刚刚创建(然后复制它)或者因为它位于最旧的文件夹中(然后删除它)。
我认为这应该可以通过一些脚本实现,但我还不够聪明,无法做到这一点...话虽如此,正如你提到的,这样的过程不是一个合适的 SVN,你确实有可能传播错误删除,我个人不喜欢这样...
您也有现成的同步应用程序(我想到的是“Synk”),它们确实能够处理这些冲突,但我的版本已经是 3 年前的了,我不确定它在同步双向时发生冲突时是否会“停止并询问”。也许您可以获取最新的演示版本并尝试 - 这比编写脚本更快。
答案2
Unison 会询问您是否要将删除、重命名、添加等操作从一个目录传播到另一个目录。您可以更改传播方向:例如,如果您在运行 Unison 时将家用工作站作为“左”根目录,将便携式硬盘作为“右”根目录,并且如果您删除了便携式硬盘上的目录,Unison 默认会建议将更改从“左”传播到“右”,即它将建议恢复硬盘上的目录。但是您可以将其从“右”更改为“左”(按<
),这样目录就会从您的工作站中删除。
所有更改都会这样工作。请记住,更改传播是双向的,您可以更改每个更改的方向。