9

我无法让 Tortoisehg (1.0) 与 subrepos 一起工作

我有一个这样的目录结构:

root
  .hg
  .hgsub
  .hgsubstate
  Customer1
    Project1
      .hg
      foo.txt
    Project2
      .hg
  Customer2
    Project3
      .hg

根目录下的 .hgsub 文件看起来像

Customer1\Project1=Customer1\Project1  
Customer1\Project2=Customer1\Project2  
Customer2\Project3=Customer2\Project3  

如果修改文件Customer1\Project1\foo.txt并从根目录提交,它可以工作

>hg ci -m "command line commit"
committing subrepository customer1\project1

在 Tortoisehgcustomer1\project1中显示状态S(subrepo),但是在提交时我收到一条消息

abort: customer1/project1: no match under directory!

不支持这种情况还是我做错了什么?

文档说:
“TortoiseHg 1.0 引入了对子存储库的基本支持,并且仅在提交/状态工具中。当 Mercurial 认为子存储库是脏的时,它将作为文件列表中的特殊条目出现在提交工具中,状态为 S . 如果子存储库包含在提交的文件列表中,则子存储库将与其他更改一起提交,更新主存储库根中的 .hgsubstate 文件。

4

5 回答 5

9

我遇到了几乎相同的问题,并开始尝试一大堆变体,最终通过在等号两侧使用正斜杠(/)而不是任何地方的反斜杠(\),我终于让它为我工作了。

所以试试...

Customer1/Project1=Customer1/Project1  
Customer1/Project2=Customer1/Project2  
Customer2/Project3=Customer2/Project3 

此外,当它不工作时,我的 .hgsubstate 文件中只有一堆零。当它开始工作时,它有一个真正的 GUID。

于 2010-11-04T05:15:07.943 回答
7

通过使用主仓库的命令行提交,我能够解决这个问题。

hg commit -m 'Updated subrepo'
于 2012-11-21T17:07:36.293 回答
4

我有同样的问题:

在我的一个存储库中,提交我更改的子存储库模块之一失败并显示消息

"abort: mysubrepo: no match under directory!"

原因:

TortoiseHG无法提交到子存储库,因为它处理文件夹名称区分大小写

示例:您的原始存储库:

C:\Shared\MySubRepo

通过命令行将其作为子存储库克隆到另一个存储库中

hg clone C:\shared\mysubrepo   <--- Note the lower cases!

将在您的父存储库中创建一个子存储库文件夹mysubrepo 。像往常一样将它添加到.hgsub文件中(我总是使用独立于平台的'/'而不是'\',所以我认为这不是错误的原因)。尝试使用 --subrepos TortoiseHG 提交将导致“目录下不匹配!” 错误。但是,通过命令行提交是有效的。

将subrepo文件夹 mysubrepo重命名为MySubRepo后(作为大写的原始文件夹)TortoiseHg 可以成功提交!

也许您还必须在hgrc文件中编辑文件夹名称,但我不确定这是否真的有必要,因为我在弄清楚文件夹名称本身存在对 Canse 敏感的差异之前,我在文件中对其进行了重命名。还可能需要从 TortoiseHg Workbench 的存储库注册表中删除存储库并读取它(和/或重新启动 Workbench)。

于 2013-07-04T11:49:18.367 回答
2

我认为您的问题在于将“Customer1\Project1”指定为子存储库,因为Customer1也应该是嵌套存储库。

Customer1Customer2都应该有 '.hgsub' 文件来描述其中的子存储库(Project1/2

在别处重新制作您的Customer1存储库并将Project1Project2克隆到其中。将Project1Project2条目添加到Customer1中的“.hgsub”文件。

然后对Customer2存储库执行相同的操作。

请记住,嵌套存储库本身可以嵌套,因此创建一个“根”存储库,然后将Customer1Customer2克隆到其中,记住将条目添加到 .hgsub 文件。

提交'root',你应该没问题。

关键是将更改从子存储库的所有实例推送到其克隆主机,以便包含该子存储库的其他克隆能够在需要时提取该修订。

我在机器上的同一个父文件夹中拥有所有主存储库,因此它将相对路径放入“.hgsub”文件中,例如“../Project1”或“../Customer1”,这是一种将更改推送到本地克隆的简单方法从我们的中央服务器。

至于使用 TortoiseHG,您可以使用 v1.0,因为只要您已经创建了“.hgsub”文件,它就会在嵌套存储库中创建和管理“.hgsubstate”文件!

于 2010-03-22T22:45:17.700 回答
1

加上我的 2 美分。

abort: customer1/project1: no match under directory在以下情况下,我在 Windows 上收到此错误:

  • repo 在一个名为的文件夹中MyFolder(注意大写)
  • 回购有一个子回购
  • 父仓库中的一些文件myfolder/filename.ext(只有一些!)是使用(注意小写)提交的

一切正常,命令行提交工作正常,但乌龟抱怨。

重命名文件(找到小写的使用hg status --all就可以了)

于 2016-12-11T21:26:55.620 回答