11

关于我的设置的一些话:

  • 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,文件 bar 出现了bar 6。然后它们也显示git statusuntracked files工作树索引中出现重复的示例

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

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

我时不时地观察到这种情况发生,但今天它到处都是。可能是当我执行git诸如此类的操作时尤其会出现此问题git commit git reset

我的假设是,这一定与.git不能很好地使用ICloud Drive Desktop file sync.

所以现在我将禁用该ICloud Drive Desktop file sync选项,看看是否能解决它。

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

这些帖子似乎是相关的:

Git 和 iCloud Drive 可以一起有效地使用吗?

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

Github 存储库克隆到多台计算机上的同步 iCloud 驱动器

4

2 回答 2

10

简短回答:将您的存储库文件夹保存在您的 iCloud Drive 同步文件夹之外,您应该没问题。为了安全起见,不要将 VCS 和文件同步服务组合在一起用于相同的目录/文件。使用 Github/GitLab/Bitbucket/等。用于同步访问和集中保管。

长答案: 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、fossil 等),您可能会遇到某种重复、损坏或安全问题. :(

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

于 2020-01-02T01:25:22.690 回答
2

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

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

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

于 2019-12-14T00:04:39.053 回答