tortoisehg和subrepos

时间:2010-03-20 19:51:15

标签: mercurial tortoisehg subrepos

我无法让Tortoisehg(1.0)使用subrepos

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

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

root下的.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
Tortoisehg customer1\project1中的

显示状态为S(subrepo) 但是在提交时我得到了一条消息

abort: customer1/project1: no match under directory!

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

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

5 个答案:

答案 0 :(得分:9)

我有几乎相同的问题,并开始尝试一大堆变化,我终于通过在等号的两侧使用正斜杠(/)而不是反斜杠(#)来为我工作。 )任何地方。

所以试试......

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

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

答案 1 :(得分:7)

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

hg commit -m 'Updated subrepo'

答案 2 :(得分:4)

我遇到了同样的问题:

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

"abort: mysubrepo: no match under directory!"

原因:

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

实施例: 您的原始存储库:

C:\Shared\MySubRepo

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

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

将在父资源库中创建一个subrepo文件夹 mysubrepo 。 像往常一样将它添加到 .hgsub 文件中(我总是使用独立于平台的'/'代替'\',所以我不认为这是错误的原因)。 尝试使用--subrepos承诺TortoiseHG将最终得到“目录下的不匹配!”错误。但是,通过命令行工作。

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

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

答案 3 :(得分:2)

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

Customer1 Customer2 都应该包含描述其中子项目的“.hgsub”文件( Project1 / 2

在其他位置重新映射 Customer1 存储库,并将 Project1 Project2 复制到其中。将 Project1 Project2 条目添加到 Customer1 中的“.hgsub”文件中。

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

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

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

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

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

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

答案 4 :(得分:1)

加我2美分。

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

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

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

重命名文件(使用hg status --all查找小写文件并且你很好)