Pergunta

Estou usando cvs2svn para converter meu repositório.Fiz isso com sucesso em um repositório e agora meu novo problema é um segundo repositório.

Na minha nova conversão, quero converter apenas o HEAD e um branch.cvs2svn possui apenas a função "excluir" para ramificações, mas não "incluir".Tenho muitas filiais e excluir cada uma delas dará MUITO trabalho....

existe alguma forma de converter apenas o trunk (HEAD) e apenas um branch?

obrigado; Oded

Foi útil?

Solução

Se você quiser apenas manter o único ramo e sem tags, então isso é fácil. A primeira regra que corresponde a um símbolo é usada; portanto, especifique o ramo que você deseja ser incluído e exclua todo o resto:

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

Se você deseja incluir não apenas o ramo, mas também o maior número possível de tags, é um pouco mais complicado. Não apenas você não sabe necessariamente os nomes de todas as tags, mas também não pode incluir tags que dependem de filiais excluídas. Nesse caso, é mais fácil trabalhar com as opções--envernizador-símbolo e--Symbol-não:

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

Isso criará um arquivo chamado "símbolo-info.out", contendo informações sobre todos os símbolos do CVS. No seu editor, abra este arquivo, encontre todas as linhas correspondentes às ramificações que você deseja excluir e altere a terceira coluna dessas linhas para a palavra "excluir". Certifique -se de que a terceira coluna da linha para a filial que você deseja incluir contém a palavra "ramo" e sua quarta coluna é o caminho em que você deseja que ela termine.

Agora execute o CVS2SVN novamente, começando no Pass 3 e usando o arquivo símbolo-info editado como um arquivo de símbolo:

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

Você receberá muitos erros como:

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

Agora volte ao editor e altere as tags listadas (bar_tag e baz_tag no exemplo) a serem excluídas também e tente executar o Pass3 novamente. Esse procedimento pode precisar ser iterado algumas vezes, mas não deve ser complicado porque o Pass3 funciona muito rapidamente.

Quando você for concluído o Pass3 sem erros, execute o restante da conversão:

cvs2svn --symbol-hints=symbol-info.out --passes=4: ...

Outras dicas

Um problema é que o cvs2svn não só precisa determinar se deve incluir uma ramificação ou não, mas (simultaneamente) se um símbolo é uma ramificação ou uma tag em primeiro lugar.Portanto, se você quiser incluir aquele branch e também algumas tags, é mais difícil do que apenas dizer "incluir apenas esse branch" - isso eliminaria todas as tags.

IOW, cvs2svn realmente não suporta isso.Você pode contornar editando seu código-fonte.Em cvs2svn_lib.symbol_strategy.BranchIfCommits, altere o caso em que retorna Branch(symbol) para

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

IIUC, BranchIfCommits deve ser usado por padrão.

Pessoalmente, eu usaria uma estratégia diferente:

 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`

Eu não chamaria isso de MUITO trabalho...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top