ICloud Drive Desktop Sync与Git-再次显示已删除的文件,并复制带有数字后缀的文件

时间:2019-12-12 15:34:50

标签: git macos macos-catalina icloud-drive icloud-documents

关于我的设置的一些话:

  • MacOs Catalina 10.15.2

  • 谈论我的桌面上的git个项目文件夹,该文件夹与启用了ICloud Drive同步的“桌面和文档文件夹”选项同步

我注意到以下情况有时会发生。昨天,我将MacBook Pro备份到了MacOs Catalina 10.15.2,这似乎加剧了以下困扰,我在git初始化的项目文件夹中注意到了这一点:

很多时候,我从deleted files local worktree untracked files开始随机出现在工作树中(有时甚至一天或更长时间)。

其次,经常,我的现有文件似乎突然duplicated-它们的副本带有数字后缀,例如对于文件foo突然有foo 2,对于文件栏有{{1} }。然后,它们还会在bar 6中显示为git statusexample of duplicates appearing in worktree index

我还观察到untracked files文件夹中的这种行为。 example of duplicates appearing in .git folder

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

我不时观察到这种情况的发生,但是今天它遍地都是。可能是当我进行了<filename> 2 gitgit commit操作时出现的问题。

我的假设是,这与git reset.git不能很好地工作有关。

因此,现在我将禁用ICloud Drive Desktop file sync选项,看看是否能解决该问题。

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

这些帖子似乎与以下内容有关:

Can Git and iCloud Drive be effectively used together?

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

Github repo cloned to synced iCloud drive on multiple computers

2 个答案:

答案 0 :(得分:1)

简短答案::将您的存储库文件夹保留在iCloud Drive同步的文件夹之外,这样就可以了。为安全起见,请勿将同一目录/文件的VCS和文件同步服务组合在一起。使用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 Drive监视-那么git应该不会有问题。

请注意,这不仅是iCloud Drive和git的问题。如果您使用任何文件同步服务(Dropbox,Google Drive,OwnCloud,Box等)和任何VCS(git,svn,化石等),则可能会遇到某种重复,损坏或安全问题。 :(

最后,值得一提的是,iCloud Drive和其他文件同步服务提供的好处是“可用性”(能够从多台计算机和设备访问存储库,保持同步)和“安全性”(放置在中心位置,并保存所有文件的安全副本)。如果您使用任何存储库托管服务(例如Github,GitLab,Bitbucket等),就已经获得了这些好处。因此,通常,实际上不需要对存储库进行文件同步-只需使用您可能已经在使用的存储库托管服务! ;-)

答案 1 :(得分:0)

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

原因是这些同步服务将单个文件视为要同步的单独的逻辑文档。当您处理文字处理文档或电子表格时,该假设是正确的。但是,对于Git存储库而言并非如此,它希望POSIX文件系统语义能够确保存储库的完整性,并会快速连续地修改许多文件。

由于这些同步工具无法确保将存储库状态作为快照读取(在工作树或.git目录中),因此它们很可能损坏您的存储库,并且不会作为备份或同步工具有效。如果您想使用这些服务进行备份,则应在.git目录中进行压缩或创建一个Git捆绑包,然后将其放入要同步的位置。