![](/img/trans.png)
[英]How to delete all the files marked as not added to git in a folder? (many deleted files reappear after switching branches)
[英]ICloud Drive Desktop Sync vs. Git - deleted files reappear and duplicates with number suffixes
关于我的设置的一些话:
MacOs Catalina 10.15.2
谈论我桌面上的git
项目文件夹,它与 iCloud Drive 同步桌面和文档文件夹选项已启用
我注意到以下情况时不时发生一段时间。 昨天,我将 MacBook Pro 备份到MacOs Catalina 10.15.2
,这似乎加剧了以下特性,我在git
初始化的项目文件夹中注意到了这一点:
很多时候,当我从local worktree
deleted
files
,它们会随机开始作为untracked files
重新出现在工作树中(有时甚至一天或更长时间)。
其次,很常见的是,我现有的文件突然似乎duplicated
- 它们的副本带有数字后缀,例如文件 foo 突然出现foo 2
,文件 bar 出现bar 6
。 然后它们也会在git status
显示为untracked files
。 工作树索引中出现重复项的示例
我还在.git
文件夹中观察到了这种行为。 .git 文件夹中出现重复项的示例
* 编辑:值得注意的是<filename> 2
重复似乎源于上一次,有时甚至是一个月前(参见上面 .git 文件夹截图中的“config 2”)。 我还注意到(但我提供的图片上没有显示)有时数字后缀是一个随机的“6”,例如没有数字后缀序列(例如 1-5)导致重复的文件名与数字 6 .
我时不时地观察到这种情况发生,但今天它无处不在。 可能是这个问题特别出现在我做一些git
ops 时,比如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
简短回答:将您的存储库文件夹保留在 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 等,您就已经获得了这些好处。您可能已经在使用的存储库托管服务! ;-)
您不应同时使用 Git 和同步服务(例如 iCloud 和 Dropbox)。
原因是这些同步服务将单个文件视为要同步的单独的逻辑文档。 当您处理文字处理文档或电子表格时,这种假设是正确的。 但是,对于 Git 存储库而言并非如此,它期望 POSIX 文件系统语义来确保存储库的完整性并快速连续修改许多文件。
因为这些同步工具不能确保您的存储库状态被读取为快照(在工作树或.git
目录中),它们很可能会损坏您的存储库,并且不会作为备份或同步有效工具。 如果您想使用这些服务进行备份,您应该将.git
目录压缩或创建一个 Git 包并将其放入要同步的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.