Integrando diferentes ramificações de fontes externas em um único repositório Mercurial

8

Edit : Tornando isso ainda mais claro quando a recompensa está prestes a expirar: existe uma maneira de importar o histórico (retirando de diferentes SCM) diretamente para um ramo específico do Mercurial?


Atualmente, estou trabalhando em uma empresa que usa o Perforce e estou abrindo caminho para o controle de versão distribuído com o Mercurial. Tive sucesso ao importar a história do Perforce usando a perfarce (um nome bastante adequado, eu rio cada vez que vejo / digo), no entanto, isso só funciona com um único ramo de cada vez.

Veja como minha configuração de integração P4 funciona:

  • Forforce, crie um "cliente", que é uma espécie de descrição do que você estará constantemente atualizando / fazendo check-out. Isso pode endereçar apenas uma ramificação por vez (tronco ou outro).
  • Depois de fazer isso, execute hg clone p4://<server>/<client_name>
  • Vá para .hg / hgrc e coloque a linha de caminho do forforce: perforce = p4://<server>/<client_name>
  • Trabalhe normalmente com o código em mercurial, faça hg pull perforcepara sincronizar, hg pushpara exportar uma lista de alterações

O que eu gostaria de poder fazer é ter um caminho forçado por filial e ter tudo funcionando no mesmo repositório. Agora, empurrar não é um problema, no entanto, se eu puxar o histórico de outro ramo, ele acabará no ramo padrão.

Eu gostaria de ser capaz de fazer algo assim hg pull perforce-R5e ter a terra no ramo R5 do mercurial. Mesmo que eu não possua histórico de fusão, seria bom o suficiente para preservar o histórico do ramo.

Existem também outros plugins para CVCSs que permitem integrar o mercurial, mas o AFAIK, o subversion, tem o mesmo problema.

Eu não acho que exista uma maneira direta de fazer isso, mas contanto que eu pudesse automatizar o processo com alguns ganchos e scripts em uma única máquina Mercurial, isso seria bom o suficiente.


Edit : Para tornar as coisas um pouco mais claras:

  • O tronco Perforce é mapeado para a ramificação padrão do Mercurial
  • A ramificação Perforce R1 deve ser mapeada para a ramificação release-1 do Mercurial (o mesmo para R2, R3 etc.)
  • Quando digo ao Mercurial para extrair do forforce (ou seja hg pull perforce, onde "forforce" é o nome do caminho que aponta para o cliente Perforce), ele deve puxar o tronco do Perforce para o padrão do Mercurial.
  • Quando digo ao Mercurial para extrair do perforce-R1 (ou seja hg pull perforce-R1, onde "perforce-R1" é o caminho para o cliente R1), ele deve puxar a ramificação do Perforce R1 para a ramificação "release-1" da Mercurial. Esta é a parte que estou perguntando .
dukeofgaming
fonte
Tenho certeza de que posso ajudar com isso (sendo um obsessivo mercurial e tendo migrado da p4 para a hg no passado), mas seria ótimo se você pudesse adicionar um diagrama mostrando o fluxo de trabalho que pretende usar, apenas para tornar as coisas um pouco mais claras.
Ed James

Respostas:

0

Não acredito que isso possa ser feito diretamente.

Uma opção seria usar a rebaseferramenta para mover as partes apropriadas do repositório para a outra ramificação após a extração usando algo como as seguintes etapas:

  • Crie o ramo desejado, por exemplo hg branch release-1
  • Confirme nova ramificação: hg commit -m "Created branch"
  • Puxe o repositório remoto para a ramificação mercurial padrão: hg pull perforce-R1
  • Rebase o novo pull para o ramo desejado: hg rebase -s <first changeset of perforce-R1> -d release-1
Scroog1
fonte
Acho que sua resposta é suficiente, no entanto, estou procurando uma maneira de fazê-lo de uma maneira mais automática.
Dukeofgaming 18/07/12