我希望我能在这里得到一些帮助,因为 SO UX 比 Mercurial 邮件列表更好。
多年来,我一直在家里愉快地使用 Mercurial。我还将它与 Bitbucket Cloud 一起用于几个更严肃(但仍然是业余爱好)的项目。
去年,我将我的团队从 SVN(公司托管)切换到 Hg(自托管,中央存储库位于网络位置)。我们都在 Windows 中。从那时起,我们不断遇到严重的中央存储库损坏问题,这只能通过备份来解决,例如:
% hg verify --verbose
repository uses revlog format 1
checking changesets
checking manifests
manifest@92: unknown parent 1 ef0f96d78ab6 of ef0f96d78ab6
manifest@92: reading delta ef0f96d78ab6: integrity check failed on
00manifest.i:88
manifest@93: unknown parent 1 e336adb3580b of e336adb3580b
manifest@93: reading delta e336adb3580b: integrity check failed on 00manifest.i:89
manifest@94: reading delta 7243aebd542b: unknown compression type '\x08'
manifest@95: reading delta 899e4507ca01: unpack requires a string argument of length 12
manifest@96: reading delta 12d4d930da4f: Manifest had an entry with a zero-length filename.
...
Some people say由于锁定问题,我们不应该为中央存储库使用网络共享。 Others解释 Mercurial 不使用那些锁,网络共享应该可以正常工作,除非文件系统有问题。
考虑到后者,我想知道我是否可以在不要求公司为 hg 提供服务器的情况下以某种方式调试我们的安装。我不太了解我们正在使用的配置,但这是我所看到的。该目录可通过 Windows 网络路径访问:\\domain.com\path\path\our-directory
。在内部,我们创建了一个名为 root
的目录,其中包含 .hg
。在.hgrc中,路径是相应的
[paths]
default = \\domain.com\path\path\our-directory\root
我们的网络目录(由公司)备份。 Hg 版本为 4.9。
最佳答案
我在类似的设置上有过类似的经历。
首先要注意的是,我认为较早的 HG 版本在通过 Windows 网络文件共享运行时确实存在一些问题,因此请确保您的版本是最新的。 (那是几年前的事了,IIRC,所以这不太可能是您当前问题的根本原因)。
其次,在我的案例中,这些问题似乎是从 在虚拟机 中运行 HG 引起的。相反,我现在在未虚拟化的 PC 上运行 [hg serve][1]
实例,并使用各种 HG 客户端访问它。没有更多的问题。
看起来,如果运行 hg serve
的 PC 和文件服务器之间的连接比我作为客户端运行 hg 的地方更可靠,这就避免了这个问题。显然,hg serve 用于客户端的 HTTP 连接本身更可靠。
我不能说这是一个确定的解决方案,因为我从未找到根本原因。但这似乎在相当长的一段时间内避免了更多的腐败。
请注意,hg serve
内置于标准 hg 命令行工具中,您可以从任何地方轻松运行它,并且不必在物理存储库所在的同一台服务器上运行存储。所以就我而言,我很随意地使用它; (显然)如果您需要更强大的东西,您可能需要与您的 IT 人员协调。
关于windows - 使用 Windows 网络共享目录时 Hg 存储库损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55967265/