提问者:小点点

ICloud Drive Desktop Sync vs.Git-删除的文件重新出现并带有数字后缀


有关我的设置的一些话:

>

谈论与ICloud驱动器同步的桌面上的项目文件夹(&A);“文档文件夹”选项已启用

我注意到以下情况时不时地发生了一段时间。昨天,我将我的MacBook Pro备份到,这似乎加剧了我在初始化项目文件夹中注意到的以下问题:

很多时候,当我从我的时,它们随机地开始在工作树中以的形式重新出现(有时甚至是一天或更久以后)。

其次,很有规律地,我现有的文件突然看起来好像是-它们有一些带有数字后缀的副本,比如file foo突然变成,file bar变成。然后,它们也在中显示为。工作树索引中出现重复项的示例

我在文件夹中也观察到了这种行为。出现在。git文件夹中的重复项示例

*编辑:值得注意的是,;2/code>重复似乎源于以前的时间,有时甚至是一个月以前(请参见上面。git文件夹屏幕截图中的“config 2”)。我还注意到(但这并没有显示在我提供的图片上),有时数字后缀是随机的,比如说“6”,例如没有数字后缀序列(例如1-5)导致重复的数字6的文件名。

我观察到这种情况时不时地发生,但今天它到处都是。当我执行一些操作(如等)时,可能会出现这个问题。

我的假设是,这一定与不能很好地工作有关。

所以现在我将禁用选项,看看这是否能解决问题。

同时,在座有没有人熟悉我所描述的问题?有没有人可以向我指出正确的方向?

这些帖子似乎有关联:

Git和iCloud Drive能否有效地协同使用?

https://apple.stackExchange.com/questions/255172/icloud-drive-and-git-repository/353123

复制到多台计算机上同步iCloud驱动器的Github repo


共2个答案

匿名用户

简短的回答是:把你的存储库文件夹放在iCloud驱动器同步文件夹之外,你应该会没事的。为了安全起见,不要将VC和文件同步服务组合在一起用于相同的目录/文件。使用github/gitlab/bitbucket/etc。用于同步访问和集中保管。

长答:iCloud Drive是一款“消费级”产品,本意是为家庭用户准备的。如果你是一个使用版本控制软件的开发人员,你会被认为是一个“专业人士”--你会发现iCloud Drive(以及其他文件同步解决方案)不是一个能够很好地使用版本控制文件夹的健壮解决方案。iCloud Drive(以及其他文件同步服务)并不知道您的VCS设置,当您执行对目录进行全面更改的操作时,比如切换分支或拉取更改时,会感到困惑。如果您想同时访问不同计算机/设备上的存储库,并拥有存储库文件的“中央备份”,只需使用众多存储库托管服务中的一个,如Github,GitLab,Bitbucket等。

更长的答案是:所有“自动同步”软件的关键问题是:我们如何确定文件何时被更改,何时应该同步?我们是否检查实际的文件内容,假设一个同名的文件应该是同一个文件?跟踪名字的变化怎么样?当我们将文件从一台计算机传输到另一台计算机时,权限(或日期)可能会发生变化,该怎么办?

通常,文件同步软件会在您工作时监视目录,以查看任何更改。一旦它检测到您在其中更改了某些内容,它将通过它的例程来确定哪些文件已经更改,并重新同步所需的文件。

有许多VCS操作--比如提取存储库中的最新更改,切换分支或回滚到以前的提交--都可能导致文件同步软件触发其同步例程。根据实际的同步算法(如何确定发生了什么变化,采取了什么同步步骤,以及实际执行同步的速度有多快),它很可能会检测到“假阳性”,这将导致您最终得到重复的结果。

在“iCloud Drive+git”这对组合中,我们有一个致命的组合:git在对整个目录结构进行彻底更改方面非常迅速,而iCloud Drive在正确检测实际更改内容方面出了名的糟糕--而且同步速度也非常慢。这意味着,当git开始切换分支和更新工作树时,iCloud Drive很可能会错误地检测到文件已经更改,而这些文件并没有更改。然后它将标记这些文件以进行同步。但是由于它的同步速度非常慢,所以当它在制作第一份副本时,您可能已经对存储库进行了另一次git更改--这将导致您现在有“文件3”,然后是“文件4”,以此类推。

希望这种情况在将来会有所改变,但同时,最安全的解决方案是不要将版本控制的存储库保存在任何自动同步的文件夹中。在这种特殊情况下,如果您将存储库保存在任何不是“文档”或“桌面”的文件夹上--并且不被iCloud驱动器监视--那么您应该不会使用Git。

请注意,这不仅仅是iCloud Drive和Git的问题。如果您使用任何文件同步服务(Dropbox,Google Drive,OwnCloud,Box等)和任何风投(git,svn,fossil等),您很可能会遇到某种类型的复制,损坏或安全问题。:(

最后,值得一提的是,iCloud Drive和其他文件同步服务提供的好处是“可用性”(可以从多台计算机和设备访问存储库,保持它们同步)和“安全性”(拥有一个中央位置,可以安全复制所有文件)。如果您使用任何存储库托管服务,例如Github,GitLab,Bitbucket等,您已经获得了这些好处。因此,一般来说,文件同步您的存储库实际上并不需要做--只需使用您可能已经使用的存储库托管服务即可!-)

匿名用户

你不应该同时使用Git和同步服务(如iCloud和Dropbox)。

原因是这些同步服务将单个文件视为要同步的独立的逻辑文档。当您处理文字处理文档或电子表格时,这个假设是正确的。但是,对于Git存储库来说就不是这样了,它期望POSIX文件系统语义来确保存储库的完整性,并且可以快速连续地修改许多文件。

因为这些同步工具不能确保将存储库状态作为快照读取(在工作树或目录中),所以它们可能会损坏存储库,并且作为备份或同步工具无效。如果您希望使用这些服务进行备份,则应该将目录焦油化,或者创建一个Git bundle并将其放入要同步的位置。