我一直在阅读有关子库以及如何使用convert扩展名和filemap从Mercurial存储库中将现有文件夹提取到子库。我可以成功地做到这一点。如果我有以下文件夹结构:如何将现有的Mercurial存储库转换为使用子存储库并保持历史记录不变?
C:\Project
---Project\root.txt
---Project\SubFolder
---Project\SubFolder\fileinsubfolder.txt
我可以创建一个SubFolder子库。与我可以用其他方法提取所有其他单独的存储库(在本例中,第二个存储库只包含root.txt文件)完全相同。之后,我可以将SubFolder存储库作为子库添加到第二个存储库。但是,虽然这两个存储库都有完整的历史记录,但这些历史记录并未链接=>将根存储库更新为较早的状态不会使子存储库处于它应该处于该状态的状态。更新到一致的旧版本(自动更新根和子版本)只有在更新到已知有子版本并具有.hgsubstate文件的版本时才会起作用。
而我想过的另一种方法是忘记当前存储库中SubFolder中的文件,并在SubFolder中启动一个新的存储库,同时添加一个.hgsub文件。我希望在这里实现的是从subrepository开始工作,但仍然有办法更新到较旧版本(在分离subrepo之前),因为SubFolder的文件仍在当前存储库的历史记录中。
虽然这不起作用:当我忘记了mercurial中的文件时,引入了一个新的repo并将其作为当前repo中的subrepo链接,并且在subrepo存在之前更新为较旧的修订版本时出现此错误:
C:\Project>hg update 1
abort: path 'SubFolder\fileinsubfolder.txt' is inside repo 'SubFolder'
的这里的问题是,更新到旧版本这是不知道subrepo时,此更新想把文件中的子文件夹。但是这个SubFolder仍然是另一个repo(有一个.hg目录),虽然主repo没有关于它的回忆,但更新并不希望将文件放在SubFolder中,因为它是一个回购。
有没有办法绕过这个错误,或者是否有更好的方法来切换到现有的Mercurial存储库中的某个文件夹使用subrepo并保持历史记录完整(和两个历史链接)?
那么,如果没有使用@Martin讨论的解决方案,你是如何处理这个问题的?如果subrepo位于不同的路径(比原始文件),“忘记”解决方案是否会工作?就我而言,我打算移动这些文件......我会回过头来看看它是如何发展的。 – harpo 2011-03-01 19:31:08