Pergunta

Quando eu tenho duas filiais em Hg repo, como mesclar apenas um arquivo com outro ramo, sem ter todos os outros ficheiros a partir de alterações fundiu?

É possível mesclar apenas determinados arquivos, em vez de changeset todo?

Foi útil?

Solução

AVISO: como um "dummy merge", como é recomendado por @Martin_Geisler, pode realmente bagunçar tudo, se mais tarde você quer fazer uma verdadeira fusão dos dois ramos. A fusão manequim será gravado, e dizer que você mesclar o ramo que você fez a fusão fictício para - você não vai ver as alterações. Ou se fundem em outro ramo, as mudanças em que outro ramo será desfeita.

Se tudo que você quer é copiar um arquivo inteiro de um galho para outro, você pode simplesmente fazer:

   hg update -r to-branch
   hg revert -r from-branch file
   hg ci -m 'copied single file from from-branch to to-branch

Se você quiser selecionar diferentes partes desse arquivo, então "hg record" é útil.

Eu só fiz isso no meu diretório home hgignore.

Se os dois ramos tiver feito alterações em um arquivo que você deseja manter, um truque sujo seria a criação de uma fusão dos dois ramos usando hg merge, possivelmente / provavelmente em ainda outro ramo, verifique se, e, em seguida, copiar um único arquivo entre a junção e o ramo de-:

   hg update -r to-branch
   branch merge-branch
   hg merge -r from-branch
   hg ci -m 'temp merge to be discarded"
   hg update -r to-branch
   hg revert -r merge-branch single-file
   hg ci -m 'merged single-file from from-branch to to-branch"
   hg strip merge-branch

Vale a pena mencionar: o caminho para "copiar um arquivo único entre os ramos" (ou revisões, ou de revisões a integrar, ou ....) é "revert hg". I.

   hg update -r Where-you-want-to-copy-to
   hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
   ...
   hg ci

Por alguma razão eu, e alguns dos meus colegas de trabalho, encontrar este muito confundindo. "Revert" == "cópia" ... faz sentido para alguns padrões de uso, mas não todos.

Outras dicas

Não. Mercurial funciona em uma base de alterações.

Mas você pode fazer uma " manequim merge " onde você ignorar as alterações recebidas de um dos ramos. Antes de se comprometer você poderia então reverter arquivos selecionados para qualquer estado que você deseja:

% HGMERGE=internal:local hg merge     # keep my files
% hg revert --rev other-branch a.txt  # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'

Talvez isso irá ajudá-lo um pouco.

Gostaria apenas de utilizar uma ferramenta externa como vimdiff para diff os dois arquivos que deseja mesclar e, em seguida, fundi-los. A vantagem disso é que você pode fazer edição seletiva em partes do arquivo. Por exemplo:

hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging

Para fazer isso você precisa habilitar as ferramentas externas na sua .hgrc, o que significa apenas adicionando estas linhas:

[extensions]
hgext.extdiff =  
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top