git repo corrupt w /包含电子邮件地址的对象目录

时间:2017-08-17 17:37:54

标签: git

我的上游回购是运行“git version 2.11.0(Apple Git-81)”的macOS 10.12.6机器上的一个裸仓库。

本地仓库在运行git 2.13.0的RHEL6.9机器上

我使用ssh连接上游。

上游回购中的

git fsck显示:

Checking object directories: 100% (256/256), done.
Checking objects: 100% (1230/1230), done.
broken link from    tree 84a63258fd5215774eba75972a9a69bef72b3d8d
              to    blob e56d3dd863e5571c0ff68a033fa992e4a98688d0
missing blob e56d3dd863e5571c0ff68a033fa992e4a98688d0

进一步挖掘表明./objects/e5/为空,但令人惊讶的是,有一个目录./objects/e5 (myemail@mydomain.com)/ 其中包含一个名为6d3dd863e5571c0ff68a033fa992e4a98688d0的文件。

这会导致什么?这不是第一次回购破坏。

1 个答案:

答案 0 :(得分:2)

在评论中讨论后,答案就像我怀疑的那样,您的存储库位于映射到同步工具的文件夹中,例如DropBox,Google Drive或类似工具。

这些工具需要一种方法来处理冲突,在同步可以赶上之前,同时编辑文件夹和/或文件的多个同步副本。

他们通常通过重命名一个或两个文件并添加一些区别于已编辑的其他副本的文件来完成此操作。一种典型的方法是附加文件副本所在的计算机名称。

正如您所发现的," Box Sync 4"通过附加您的帐户电子邮件地址来处理此问题,如您链接到的documentation所示:

  

一般情况下,如果Box网站上的现有项目与在同一文件夹位置本地创建的项目同名,您将看到附有Box Sync的电子邮件重复项。 Box Sync将重命名较新的文件或文件夹,并添加用户的电子邮件地址(email@company.com)以防止这两个项目之间发生冲突。

由于它是一个重命名的文件夹,我的猜测是发生了以下情况:

  1. 在一个这样的链接副本上,添加了一个名为e5的文件夹,其中包含文件
  2. 然后将此更改同步到云
  3. 在云更改可以同步到您的链接副本之前,您添加了自己的e5文件夹
  4. 当同步赶上时,不是保留一个文件夹而只是将两个文件夹中的所有文件合二为一,而是执行了冲突消歧,重新命名了本地文件夹。
  5. 我将重申我在评论中所说的内容。 DropBox,Google Drive,OneDrive,Box Sync 4等文件夹同步工具(感谢您在我的列表中添加其他名称)永远不应该用于同步DVCS存储库,除非以下情况属实:

      

    在任何地方,您只有1个本地文件副本,基本上有两个文件副本,在一台计算机上和云中。

    这样做的原因是,如果您提交两个不同的此类链接副本,则在同步赶上之前,您可能会损坏存储库。当然,这种腐败通常通常并不太难以修复,但我已经看到了所有地狱都已经破裂的例子。

    如果您需要备份,请考虑将遥控器添加到您的某个存储库,并自动推送到由DVCS感知云主机托管的云中的存储库。