Fechando filiais de Hg

103

Ao usá hg branch FeatureBranchName-lo e publicá-lo em um repositório central compartilhado entre os desenvolvedores, há uma maneira de fechar o FeatureBranchNamequando seu desenvolvimento for oficialmente mesclado com o branch padrão?

Também seria útil se o FeatureBranchNamenão estivesse visível ao executar um hg branchescomando.

Nate
fonte

Respostas:

158
hg commit --close-branch

deve ser o suficiente para marcar o fechamento de um galho. (veja hg commit)

--close-branch

marcar uma ramificação como fechada, ocultando-a da lista de ramificações.

Veja também este tópico :

Minha expectativa é fechar um branch porque essa linha de desenvolvimento chegou a um beco sem saída e não quero mais ser incomodado com isso.
Portanto, quando um branch foi fechado, eu não devo vê-lo (em branches, heads, log, por exemplo) a menos que eu peça explicitamente para ver branches fechados.

Devo observar que espero que um branch fechado permaneça no repositório; pode ser útil no futuro, e a commit --close-branchmensagem deve pelo menos explicar por que a filial foi fechada.
Podar ramos é outra coisa.


Nota: que "fechar filial" de negócios é um aspecto visto como ausente no Git, quando comparado ao Mercurial :

Ramificações no git são, sempre nos disseram, coisas efêmeras para serem usadas e jogadas fora, e até onde eu sei o git não tem uma maneira de indicar aos seus colegas que você terminou com uma ramificação;
a única maneira de fazer isso é excluí-lo ou esperar que eles vejam o commit de mesclagem final e entendam que o branch está fechado para desenvolvimento posterior.

[No Mercurial] Quando você terminar com um ramo, no entanto, você não pode excluí-lo do repositório; em vez disso, você emite um commit que fecha o branch, e o Mercurial nota que o branch está fechado. Ele permanecerá uma parte permanente do histórico do seu repositório.

VonC
fonte
3
Existe uma maneira de fechar uma filial não atual?
Thomas S.
@ThomasS. 5 anos depois, não tenho certeza. O documento foi atualizado recentemente: mercurial.808500.n3.nabble.com/…
VonC de
1
@ThomasS. sim, essa resposta me ajudou com esse problema. hg debugsetparent <revision> hg branch <branchOfRevision> Observe que a ordem é importante. Isso fará com que seu repo pense que está na nova revisão, enquanto todos os seus arquivos são da versão inicial. Depois disso, você pode usar o commit --close-branch, mas usar a opção -X * para fazer um commit vazio. hg commit --close-branch -X * -m "Closing branch."
Maske
8

Escrevi um script simples que completa o fechamento do branch, comandos encontrados em PruningDeadBranches .

## Roteiro ##

#!/bin/bash
#script to close the not required branch in mercurial

hg up -C $1
if [ $? -eq 0 ]; then
    echo "$1 is up"
else
    echo "branch not found, please recheck your argument"
    exit 1
fi 
# if we are here then the branch is up, so we do the following
hg commit --close-branch -m 'this branch no longer required' 
echo "$1 is closed"
hg up -C default
echo "default is up" 

Como

Mova para a cópia local do repositório e execute este script fornecendo um argumento. Por exemplo:

$./the_script_above.sh bad_branch_name_to_close

O que isso faz

Isso faz o seguinte:

  1. Se a ramificação existir, ela será atualizada para a ramificação fornecida ou então existirá uma mensagem de erro.
  2. Fecha a filial.
  3. Atualizações para o branch padrão.
  4. Para.
Roshan Poudyal
fonte
O script não lida com ramos com espaços no nome.
Jared
@Jared pode executar um comando up independente com seu branch. Para, por exemplo: $ hg update yourbranchnamecontainingspace. Acho que poderíamos criar um branchname com espaço, no entanto, você obtém um erro de análise ao executar comandos mercurial como update . Você pode querer considerar o escape do caractere de espaço ao passar o nome do ramo como um parâmetro para o script. Felicidades.
Roshan Poudyal
não está echo "$1 is up"duplicado aqui? Em thene depois fi? Além disso, esse script pode ser útil se
oferecer
1
@YakovL yes =). Obrigado pela notificação. Eu atualizei o script. Claro que seria útil para mesclagem opcional, tentarei atualizá-lo no futuro, mas até então você pode dimensionar o script ao seu gosto =)
Roshan Poudyal