5

我在 Perfarce 扩展上遇到了一个我似乎无法解决的问题。我最初通过以下方式克隆了我的 P4 仓库的一部分:

hg clone --startrev 71555 p4://perforce:1666/greg_nt_main-hg lwnthg

我选择了一个 start rev,它只是当前 head 修订后面的几个更改列表——尝试一个没有 startrev 的完整克隆不起作用,但这是一个单独的问题,我可能会单独写。

在克隆期间,我收到以下错误:

"abort:untracked file in working directory differs from requested revision on 'MAIN/apps/Win32/BenchMark/Jamfile'”

然而,在检查我磁盘上出现的内容时,看起来所有文件实际上都已成功克隆。提到的文件与 Peforce 中的文件相同,并且在克隆过程之前 lwnthg 文件夹是空的。'hg status' 显示了许多尚未提交的文件——我猜是因为克隆中止了?所以我承诺了他们,一切看起来都很棒。

我对我的文件进行了一些编辑,将它们提交到本地存储库没有问题。我喜欢 Mercurial 的可爱;)

但是,当我将更改推回 Perforce 时,我收到以下错误:

abort: no p4 changelist revision found

我确认我有一个有效的 P4 登录票,P4 已启动,等等,一切正常。

所以我的猜测是 Perfarce 将上次从 P4 同步到的更改列表存储在某处,并且第一次中止发生在写出此信息之前。如果我尝试从 P4 执行拉取操作,我也会收到相同的错误。假设我的理论是正确的,有没有办法在本地 Perfarce 配置中重建这些信息?

注意“Perfarce”不是错字。它是链接到 Perforce的 Mercurial 扩展的名称。如果您将其更改为“Perforce”,该问题将失去一些意义。感谢您在尝试解决问题方面的帮助,但始终值得首先检查事实:)

4

1 回答 1

1

要回答我自己的问题,答案似乎是否定的。

我做了更多的挖掘工作,并与原作者弗兰克·金斯伍德取得了联系,解决方案是首先确保您的仓​​库进口没有错误。一旦完成,Perfarce 绝对是一种享受。

最初中止导入取决于我的使用情况。在遵循其他地方找到的各种说明(包括 Stack Overflow)之后,我试图使用 hg clone 的目标参数来获取正确的 repo 名称。但看起来导入的成功对 Perforce 客户端规范根目录和作为 hg clone 的最后一个参数给出的目标文件夹之间的交互很敏感。

基本上,确保这些文件夹不重叠。

根据 Perforce 中的文件,如果您有重叠,它可能会起作用,但您可能会在将来为自己设置一大堆麻烦。

建议将文件夹分开。我的问题是我不想将 hg 文件夹的默认文件夹名称作为 Perforce 客户端规范名称 - 如果您不提供目标文件夹,就会这样做。但是,可能由于错误,如果您确实提供了目标文件夹,那么它必须与客户端规范根目录匹配。由于这种行为,我假设文件夹实际上必须相同。

在 Mercurial 中,创建 repo 后重命名顶级文件夹是安全的。因此,如果您不希望名称由 Perforce 客户端规范的名称指定,那么您可以在之后重命名。这就是我采取的方法。

希望这可以帮助其他试图在 Mercurial 水域中涉足的人。

更新 Frank 更新了 Perfarce 扩展以更好地捕获这种情况。从Perfarce 存储库获取最新信息。

于 2011-03-22T20:44:49.300 回答