代码之家  ›  专栏  ›  技术社区  ›  Oded

cvs2svn包括单分支和头部?

  •  2
  • Oded  · 技术社区  · 16 年前

    我正在使用cvs2svn转换我的存储库。我在一个存储库中成功地完成了这项工作,现在我的新问题是第二个存储库。

    在我的新转换中,我只想转换HEAD和一个分支。cvs2svn只对分支具有“排除”功能,而没有“包含”功能。我有很多分支机构,排除每一个分支机构都需要大量的工作。。。。

    谢谢,

    2 回复  |  直到 16 年前
        1
  •  1
  •   Martin v. Löwis    16 年前

    没有标签

    cvs2svn --force-branch=mybranch --exclude='.*' ...
    

    如果你不仅想包含分支,还想包含尽可能多的标签,那么就有点棘手了。您不仅不一定知道所有标签的名称,而且也不能包含依赖于排除分支的标签。在这种情况下,最容易使用--writesymbol info和--symbol hints选项:

    cvs2svn --write-symbol-info=symbol-info.out --passes=1:3 ...
    

    这将创建一个名为“symbol info.out”的文件,其中包含有关所有CVS符号的信息。在编辑器中,打开此文件,找到与要排除的分支对应的所有行,并将这些行的第三列更改为“排除”一词。确保要包含的分支行的第三列包含单词“branch”,第四列是您希望它结束的路径。

    cvs2svn --symbol-hints=symbol-info.out --passes=3 ...
    

    你会遇到很多错误,比如:

    ERROR: ExcludedSymbol('FOO_BRANCH') cannot be excluded because the following symbols depend on it:
        BAR_TAG
        BAZ_TAG
    

    现在返回编辑器,将列出的标签(示例中的BAR_TAG和BAZ_TAG)也更改为排除,然后再次尝试运行pass3。这个过程可能需要迭代几次,但不应该很麻烦,因为pass3运行得很快。

    当你顺利完成pass3时,运行其余的转换:

    cvs2svn --symbol-hints=symbol-info.out --passes=4: ...
    
        2
  •  1
  •   mhagger    16 年前

    IOW,cvs2svn并不真正支持这一点。你可以通过编辑它的源代码来解决这个问题。在cvs2svn_lib.symbol_strategy中。BranchIfCommits,将返回Branch(符号)的大小写更改为

       if symbol.name == 'my_branch':
           return Branch(symbol)
       else:
           return ExcludedSymbol(symbol)
    

     1. convert the repository once, with all branches.
     2. do a "svn ls" on branches, and redirect that into a file.
     3. edit the file to construct an exclude regex out of it, of the form `b1|b2|...|bn`
    

    我不会说这是很多工作。。。