什么可能导致 mercurial 工作目录中出现“文件丢失”的情况,我应该怎么做才能修复它?

什么可能导致 mercurial 工作目录中出现“文件丢失”的情况,我应该怎么做才能修复它?

今天,我注意到我的 Ubuntu 和 Mac 机器上的一些文件似乎在我的 Windows 机器上的 Mercurial 工作目录中丢失了。

我在用着Mercurial保持文件夹在多台机器之间同步。

每当有人改进该文件夹中的任何文件或向该文件夹中添加更多文件时,我希望这些机器中的每一台都能使用新的和改进的文件进行更新。

我对每台笔记本电脑执行了“推送”和“拉取”以及“更新”操作,以便将它们与服务器同步(并在服务器上执行了“更新”操作),并检查了工作目录是否“干净”。因此,我预计工作目录中的每个子文件夹在每台机器上至少都有相同数量的文件。但我看到的是,Mac 和 Ubuntu 在其工作目录的一个特定子文件夹中有十几个文件 - 因此,显然 Mercurial 在将新文件添加到其中一台机器并将这些新文件复制到另一台机器时成功更新了这些新文件 - 但 Windows 机器在该子文件夹中只有 3 个文件。

在 Windows 7 文件管理器“文件夹选项 >> 查看”中,我启用了“显示隐藏文件、文件夹和驱动器”。

  • 在 Ubuntu 14 服务器上,我使用 TortoiseHg。
  • 在 Ubuntu 14 笔记本电脑上,我使用 TortoiseHg。
  • 在 Mac OS X 笔记本电脑上,我使用 SourceTree。
  • 在 Windows 7 笔记本电脑上,我使用的是旧版本的 TortoiseHg,最近将 TortoiseHg 升级到了 3.5.2 版本。
  • 该存储库本身最初是在 2012 年在一台几年前被重新利用且硬盘被清除的机器上创建的。(当时它可能运行的是 Windows XP)。

我应该怎样做才能写出一份关于我所看到的“丢失文件”问题的好的错误报告?

答案1

  • 对于新添加的文件,你必须手动将hg add文件添加到 repo
  • hg commit对于推送之前添加或更改的文件
  • hgignore(通常情况下)是特定位置的文件,而不是存储(也不是发布)的文件,它的内容可能不同,因此不同的主机上会忽略不同的文件集(hg add不带参数可能会产生不同的结果):检查hg status具有唯一文件的 repo

答案2

我知道这是一个老问题,但也许这会对其他人有所帮助。

我遇到了同样的问题:一个文件被跟踪,但在一台机器上hg pull && hg up实际上并没有在磁盘上创建该文件。

在存储库浏览器中检查文件(使用 Tortoise HG)显示它已被跟踪,但 HG 拒绝在磁盘上创建实际文件。

解决方案是对相关存储库进行全新克隆。

如果由于某种原因您无法承担制作全新克隆的费用(例如,对大型项目进行耗时的本地重新配置),则以下解决方法应该可以解决问题:

  1. 关闭可能正在使用存储库或任何跟踪文件的所有应用程序(IDE、Tortoise HG 等)。
  2. 从问题存储库中,将.hg目录移动到其他地方。
  3. 在新目录中对存储库进行全新克隆。
  4. .hg将目录从新的克隆存储库复制到旧存储库。
  5. 在旧的存储库中运行hg up(如果需要,更改分支)。

这应该会重新创建磁盘上所有丢失的文件。

.hg当您的文件一切正常时,删除从旧存储库和新存储库克隆移动的备份目录。

相关内容