Bazaar - extrai apenas a última revisão (e não o ramo inteiro)

1

Brevemente : Como posso obter a revisão mais recente (apenas) de um repositório de bazar remoto e adicioná-la como uma nova revisão para um repositório local.

Background : Eu tenho um sistema de desenvolvimento e um sistema de produção. Em um sistema de desenvolvimento, há um repositório de bazar com ramificações com muitas revisões de desenvolvimento. De vez em quando, quero incorporar os últimos desenvolvimentos no sistema de produção. Eu quero fazer isso por algum tipo de "puxar" (sistema de desenvolvimento não pode se conectar à produção por razões de segurança, mas a produção pode iniciar a conexão para o desenvolvimento).

Na produção, não quero todo o histórico de revisão do desenvolvimento, apenas as revisões que realmente entram em produção (normalmente é a ponta do branch). No entanto, quero que o controle de versão no sistema de produção acompanhe o que realmente entra em produção a cada vez.

bzr pull obtém o ramo inteiro. bzr pull --revision=last:1 também extrai o ramo inteiro, até a revisão especificada.

bzr merge --pull --revision=last:1 também puxa o ramo inteiro. bzr merge --pull --revision=last:2..last:1 e bzr merge --pull --change=last:1 puxam apenas as novas alterações introduzidas na última revisão, mas não as alterações introduzidas nas revisões mais antigas.

Com checkout leve, não tenho controle de revisões que são puxadas para produção - a árvore de trabalho local permanece como parte do repositório remoto

A única maneira que vejo até agora é importar a árvore de trabalho usando algum rsync ou scp e depois cometer uma ramificação local. Alguma idéia melhor?

    
por Sandman4 28.10.2012 / 12:12

3 respostas

1

Até certo ponto, você pode fazer isso executando:

$ bzr branch --stacked REMOTE-URL LOCAL-PATH

isso criará uma ramificação local que tenha apenas as últimas revisões. É um ramo independente, portanto, se você fizer um commit no branch local, ele não será automaticamente enviado para o branch remoto. Se você tentar acessar quaisquer dados na ramificação local que não estiverem disponíveis, o bzr irá distribuir para a ramificação remota para localizar esses dados.

    
por jelmer 17.02.2013 / 16:30
0

Em primeiro lugar, você não pode realizar isso apenas extraindo o último IMO de revisão, porque cada revisão armazena apenas as diferenças com a revisão anterior. Isso explica porque, por exemplo, bzr merge --pull --change=last:1 não funciona.

Eu REALMENTE puxaria o ramo inteiro, mas se você não quiser, você pode fazer algo como

bzr diff -rx -p1

em que x é a última revisão que você já incluiu na produção. Isso cria uma visão geral de todas as alterações entre o diretório de trabalho atual e a revisão x , mas sem todos os detalhes das revisões intermediárias. O sinal -p1 garante que a saída esteja no formato de correção ( link ). Então você pode aplicar este patch em seu sistema de produção.

Eu acho que é feio, mas pode fazer o trabalho.

    
por Gerhard Burger 28.10.2012 / 12:56
0

Se bem entendi, você deseja sincronizar a ramificação de produção para o mesmo estado da dica do ramo de desenvolvimento, mas sem o histórico de revisão, certo?

Você pode fazer isso com:

bzr merge OTHER_URL
bzr revert --forget-merges
bzr commit

O resultado é efetivamente como se você tivesse escolhido as alterações de todas as revisões ausentes e as tivesse cometido de uma só vez.

No entanto, há uma grande ressalva aqui. Como o histórico de revisões não é preservado, o Bazaar não sabe que as alterações que você selecionou já foram aplicadas. A consequência é que, da próxima vez que você tentar esses mesmos passos, você terá conflitos. Então, não acho que isso seja uma solução utilizável.

Outra maneira (com uma ressalva diferente) é esta:

bzr diff --new OTHER_URL | patch -p0

Isso aplicará o diff do branch atual e o branch de referência como um patch. A advertência aqui é que o patch não pode lidar com renomeações.

Em suma, acho que o que você está tentando fazer é estranho. Você deve apenas puxar ou mesclar e manter o histórico. Ou você pode tentar trabalhar com ramificações de recursos. A coisa sobre ramificações de recursos é quando o recurso é concluído, você para de trabalhar nele. Nesse caso, você pode mesclar toda a ramificação do recurso e esquecer as revisões intermediárias, porque você nunca mais irá mesclar a ramificação da feição, para que você não tenha o problema de escolha dupla.

    
por janos 06.02.2013 / 11:17