Pergunta

Usando o Mercurial, como posso incluir todos os conjuntos de alterações não é conhecido para ser em outro repositório, incluindo segredo deles?

Eu sei bundle's --base opção acontece incluir segredo deles, mas eu não quero que o --base comportamento.(E parece estranho que o segredo changesets são sempre incluído com --base mas são nunca incluído sem ele.Não deveria haver uma opção separada?)

FYI, eu normalmente deseja fazer um backup de todos os conjuntos de alterações que estão só no meu local de recompra, antes de tentar uma potencialmente perigosa história de reconfiguração.

Foi útil?

Solução

Você está correto, que hg bundle normalmente excluir segredo deles.Isso é porque é apenas executar o equivalente a hg outgoing e agrupamento destes changesets.

Assim, algumas soluções:

  • Se você sabe que você tem, pelo menos, um projecto de público ou de saída changeset como um ancestral do seu segredo, a passeio, em seguida, você pode usar

    $ hg bundle --base "parents(outgoing())"
    

    para obter o que deseja.O outgoing() revset vai escolher a falta de rascunho e público changesets e parents(outgoing() será adequado bases.Desde que você use --base você obtém todos os descendentes (público, rascunho, e em segredo) a partir destas bases.

  • Você pode, temporariamente, fazer o seu segredo changesets projecto, pacote e, em seguida, marcá-las novamente segredo:

    $ secret=$(hg log --template "{rev} " -r "secret()"); \
      hg phase -d $secret; \
      hg bundle out.hg; \
      hg phase -f -s $secret
    

    (Eu uso o Zsh e ali eu tive que usar ${=secret} em vez de $secret porque Zsh não faz word divisão de parâmetro de expansão por padrão.)

    É importante cadeia de comandos com ; em vez de && desde que você deseja redefinir as fases, independentemente do que acontece no hg bundle chamada de passagem de parâmetros errada hg bundle não significa que você perderá todas as informações sobre o segredo deles.Note-se também que, desde segredo changesets só tem segredo descendentes, não há perda de informação com esta técnica.

    Você pode transformar isso em uma shell de alias:

    [alias]
    bundle-all = !secret=$(hg log --template "{rev} " -r "secret()");
                 hg phase -d $secret;
                 hg bundle $@;
                 hg phase -f -s $secret
    

    O $@ é expandida pelo Mercurial antes de o alias é invocado e isso permite que você insira os argumentos necessários para hg bundle.

Note que a informação de fase não pode ser armazenado em pacotes — o formato de pacote não foi alterado para acomodá-la.

Outras dicas

Se você sabe que há pelo menos um público changeset, você pode usar isto:

hg bundle -r "not public()" --base public()

OTOH, que não funcionam se não houver público changesets, use este código:

hg bundle -r "not public()" --base null

O problema com Martin, a resposta é que depende de saída, que por sua vez depende de uma conexão direta com o premir de recompra.Se você nem sempre têm uma conexão de internet para que repo, esses métodos funcionam bem para mim.Ele também é um pouco mais simples do que a fase de dança.

Um teste para saber se há alguma público deles é capturar a saída de:

hg log -r public() -l 1 --template "{rev}"

e teste o seu comprimento, ou a presença de [0-9].

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