uso - verificar tags git




Como posso arquivar ramificações do git? (8)

Eu tenho algumas ramificações antigas no meu repositório git que não estão mais em desenvolvimento ativo. Eu gostaria de arquivar os ramos para que eles não apareçam por padrão quando executando git branch -l -r. Eu não quero deletá-los, porque quero manter o histórico. Como posso fazer isso?

Eu sei que é possível criar um ref fora de refs / heads. Por exemplo, refs / archive / old_branch. Há alguma consequência de fazer isso?


Às vezes, arquivar ramificações da seguinte forma:

  1. Gere arquivos de correção, por exemplo, format-patch <branchName> <firstHash>^..<lastHash> (obtenha firstHash e lastHash usando git log <branchName> .
  2. Mova os arquivos de patch gerados para o diretório em um servidor de arquivos.
  3. Exclua a ramificação, por exemplo, git branch -D <branchName>

"Aplique" o patch quando precisar usar o branch novamente; entretanto, aplicar os arquivos de correção (consulte git am ) pode ser um desafio, dependendo do estado do desvio de destino. No lado positivo, essa abordagem tem o benefício de permitir que os commits da filial sejam coletados como lixo e economizar espaço em seu repositório.


A resposta de Jeremy é correta em princípio, mas IMHO os comandos que ele especifica não estão certos.

Veja como arquivar uma ramificação em uma tag sem precisar fazer o checkout da ramificação (e, portanto, sem precisar fazer o checkout para outra ramificação antes de poder excluir essa ramificação):

> git tag archive/<branchname> <branchname>
> git branch -D <branchname>

E aqui está como restaurar um ramo:

> git checkout -b <branchname> archive/<branchname>

Estendendo a answer de Steve para refletir as mudanças no controle remoto, eu fiz

 git tag archive/<branchname> <branchname>
 git branch -D <branchname>
 git branch -d -r origin/<branchname>
 git push --tags
 git push origin :<branchname>

Para restaurar do controle remoto, veja esta questão .


Estou usando os aliases a seguir para ocultar ramificações arquivadas:

[alias]
    br = branch --no-merge master # show only branches not merged into master
    bra = branch                  # show all branches

Então git br para mostrar ramos ativamente desenvolvidos e git bra para mostrar todos os ramos, incluindo os "arquivados" .


Eu não arquivaria filiais. Dito de outra forma, filiais se arquivam. O que você quer é garantir que as informações relevantes para os arqueólogos possam ser encontradas por meios confiáveis. Confiável na medida em que ajuda no desenvolvimento diário e não acrescenta um passo extra ao processo de realização do trabalho. Ou seja, não acredito que as pessoas se lembrem de adicionar uma tag quando terminarem com uma ramificação.

Aqui estão dois passos simples que ajudarão muito a arqueologia e o desenvolvimento.

  1. Vincule cada ramificação de tarefa a um problema associado no rastreador de problemas usando uma convenção de nomenclatura simples .
  2. Sempre use git merge --no-ff para mesclar ramificações de tarefas; você quer que a consolidação de mesclagem e a bolha de histórico, mesmo para apenas um commit.

É isso aí. Por quê? Porque, como arqueólogo de código, raramente começo a querer saber que trabalho foi feito em um ramo. Muito mais frequentemente é por isso que em todos os nove infernos gritantes o código é escrito dessa maneira ?! Eu preciso mudar o código, mas ele tem algumas características estranhas, e eu preciso quebrá-las para evitar quebrar algo importante.

O próximo passo é git blame para encontrar os commits associados e então esperar que a mensagem de log seja explicativa. Se eu precisar ir mais fundo, vou descobrir se o trabalho foi feito em um ramo e ler o ramo como um todo (junto com o comentário no rastreador de problemas).

Vamos dizer git blame points no commit XYZ. Eu abro um navegador de histórico do Git (gitk, GitX, git log --decorate --graph , etc ...), encontro o commit XYZ e vejo ...

AA - BB - CC - DD - EE - FF - GG - II ...
     \                       /
      QQ - UU - XYZ - JJ - MM

Tem o meu ramo! Eu sei que QQ, UU, XYZ, JJ e MM são todos parte da mesma ramificação e eu deveria olhar suas mensagens de log para detalhes. Eu sei que o GG será um commit de mesclagem e terá o nome do branch que esperamos estar associado a um problema no tracker.

Se, por algum motivo, eu quiser encontrar uma ramificação antiga, posso executar o git log e procurar o nome da ramificação na consolidação da mesclagem. É rápido o suficiente, mesmo em repositórios muito grandes.

É isso que quero dizer quando digo que os ramos se arquivam.

Marcar todas as ramificações adiciona um trabalho desnecessário para fazer as coisas (um processo crítico que deve ser impiedosamente simplificado), reduz a lista de tags (não falando de desempenho, mas de legibilidade humana) com centenas de tags que são úteis apenas ocasionalmente, e isn ' t mesmo muito útil para arqueologia.


Minha abordagem é renomear todas as ramificações com as quais não me importo com um prefixo "trash_" e usar:

git branch | grep -v trash

(com uma ligação de chave shell)

Para manter a coloração do ramo ativo, seria necessário:

git branch --color=always | grep --color=never --invert-match trash

Você pode arquivar os ramos em outro repositório. Não é tão elegante, mas eu diria que é uma alternativa viável.

git push git://yourthing.com/myproject-archive-branches.git yourbranch
git branch -d yourbranch

Você pode usar um script que irá arquivar o ramo para você

archbranch

Ele cria uma tag para você com o prefixo archive / e, em seguida, exclui a ramificação. Mas verifique o código antes de usá-lo.

Uso - $/your/location/of/script/archbranch [branchname] [defaultbranch]

Se você deseja executar o script sem gravar o local, adicione-o ao seu caminho

Então você pode chamá-lo por

$ archbranch [branchname] [defaultbranch]

O [defaultbranch] é o ramo que irá quando o arquivamento é feito. Existem alguns problemas com o código de cores, mas outros que devem funcionar. Eu tenho usado em projetos há muito tempo, mas ainda está em desenvolvimento.





git