Mercurial Repo有一个来自svn repo的子文件夹 - 可能吗?

时间:2011-04-13 15:40:47

标签: svn mercurial

有几个类似的问题,但我找不到任何足够接近的问题,不能提出新问题。

我们拥有一个由20多个项目组成的受到控制的vs2010解决方案 我们还有一个承包商在其中一个项目的一部分上远程工作,一个Labview FPGA + RT + DotNetAssembly。

我希望将他的代码放入我们Mercurial仓库的“ContractorsSVNRepo”(见下文)中,当我想要更新时,我会下载他的svn仓库,如果我对它感到满意,那么就可以使用我们的mercurial repo。

我可以访问他的svn repo以获得他的部分项目,但是出于安全/ IP原因,他无法访问我们的Mercurial仓库。因为我不熟悉mercurial我甚至不知道是否可以让他只访问一个回购的文件夹,所以这就是我想出的。

这会有用吗?能做到吗?我只是在目标文件夹中创建一个svn repo,下载它然后只将我想要的文件添加到我们的仓库?两个scc系统会在一起扭转/发挥得很好吗?我会尝试一下,看看会发生什么,但我不熟悉mercurial但不想冒险破坏我们的mercurial repo并且无法快速恢复。

OurAppsMercurialRepo
  Proj1  
  Proj2
  Proj3
    Proj3Folder1    
    Proj3Folder2  
    Proj3Folder3
    ContractorsSVNRepo 
  ...  
  Proj40  

编辑1:
我不认为我已经做到了这一点,因为拉动来自另一台机器的更改只会拉动.hgsub文件,它不会拉动svn repo(或者我可以告诉,甚至尝试我没有被要求或添加任何登录详细信息)。

我在我的机器上做了这个:
    HG init ContractorsSVNRepo
    用“ContractorsSVNRepo = [svn] https://ContractorsRepo.com/svn/trunk”创建.hgsub     HG添加.hgsub
    svn co https://ContractorsRepo.com/svn/trunk ContractorsSVNRepo
    HG状态
    HG commit -m“Subrepositories added”

但是,当我拉动另一台机器时,它会拉动.hgsub文件。 链接的文档表明,对主要回购进行拉动将拉回两个回购,但它只会拉动多头回购?我错过了这些步骤吗?

Edit2:

  

在OurAppsMercurialRepo内部:
  svn co http://svn.contractor.com/svn/proj4other/trunk Proj3 / ContractorsSVNRepo

     

将以下内容直接放在OurAppsMercurialRepo内的.hgsub文件中:
  Proj3 / ContractorsSVNRepo = [svn] http://svn.contractor.com/svn/proj4other/trunk

     

从现在开始,当您提交OurAppsMercurialRepo时,提交时对subversion结帐的修订将存储在mercurial中

感谢您的回复,但是这并没有改变任何事情,但是它仍然没有下载/更新svn源拉动主回购,我现在得到一个错误的路径名称
    “中止:路径包含非法组件:” 我怀疑这是因为我们的路径名称中包含“”所以我要放弃并创建一个单独的svn repo并手动将我想要的文件复制到mercurial中。它不会失败,它不会让其他开发人员头疼,我不会再浪费时间了。

2 个答案:

答案 0 :(得分:6)

是的可能。见mercurial Subrepos - > https://www.mercurial-scm.org/wiki/Subrepository

答案 1 :(得分:2)

内部OurAppsMercurialRepo

svn co http://svn.contractor.com/svn/proj4other/trunk Proj3/ContractorsSVNRepo

将以下.hgsub文件直接放在OurAppsMercurialRepo

Proj3/ContractorsSVNRepo = [svn]http://svn.contractor.com/svn/proj4other/trunk

从现在开始,当您提交OurAppsMercurialRepo时,提交时的subversion checkout修订版存储在mercurial中。例如。您当地使用的ContractorsSVNRepo 被迫成为最新的。

如果您担心他们会在一段时间后删除subversion存储库,您可以先制作一个cron / schedule任务,每晚/每小时/ 5分钟拉出>转换svn repo。这里的神奇之处是HgSubversion,它可以在一个多变的中转换Subversion存储库,并且保持两者之间的映射。然后使用mercurial存储库作为上面的子参数:

安装HgSubversion后,将subversion存储库转换为mercurial存储库:

hg clone -U http://svn.contractor.com/svn/proj4other proj4otherconverted

(我最后删除了trunk部分,因为HgSubversion也可以转换分支和标签)

然后在proj4otherconverted目录中安排此命令:

hg pull

OurAppsMercurialRepo内部制作目录Proj3,然后:

hg clone http://hg.yourcompany.com/hg/proj4otherconverted Proj3/ContractorsSVNRepo

将以下.hgsub文件直接放在OurAppsMercurialRepo

Proj3/ContractorsSVNRepo = http://hg.yourcompany.com/hg/proj4otherconverted