我无法让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文件。“
答案 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
:
MyFolder
的文件夹中(注意大写)myfolder/filename.ext
提交的(请注意小写)一切正常,命令行提交工作正常,但Tortoise抱怨。
重命名文件(使用hg status --all
查找小写文件并且你很好)