Preciso excluir ramificações antigas e não mantidas do nosso repositório remoto. Estou tentando encontrar uma maneira de listar as ramificações remotas pela data da última modificação, e não consigo.
Existe uma maneira fácil de listar ramificações remotas dessa maneira?
git
maintenance
administration
branch
Roni Yaniv
fonte
fonte
Respostas:
commandlinefu tem 2 proposições interessantes:
ou:
Isso é para ramificações locais, em uma sintaxe Unix. Usando
git branch -r
, você também pode mostrar ramificações remotas:Michael Forrest menciona nos comentários que o zsh requer escapes para a
sed
expressão:kontinuity acrescenta nos comentários :
Em várias linhas:
Nota: a resposta do n8tr , baseada em, é mais limpa. E mais rápido . Consulte também " Opção somente nome para ? "
git for-each-ref refs/heads
git branch --list
De um modo mais geral, o triplicado nos lembra nos comentários :
(Ilustrei esse ponto em 2014 com " Qual é a diferença entre
$(command)
e`command`
na programação de shell? ")fonte
/json
ao final de qualquer URL commandlinefu.com e você receberá todos os comandos como JSON.Aqui está o que eu uso:
Esta é a saída:
Para ramificações remotas, basta usar "refs / remotes" em vez de "refs / heads":
Com base na resposta do n8tr , se você também estiver interessado no último autor do ramo e se tiver a ferramenta "coluna" disponível, poderá usar:
O que lhe dará:
Você pode chamar "git fetch --prune" antes para ter as informações mais recentes.
fonte
authordate
(que parece ser quando a ramificação foi criada pela primeira vez?). Se você alterarauthordate
paracommitterdate
, verá as datas da confirmação mais recente em cada ramificação. Assim:git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/heads
Com base no Olivier Croquette , eu gosto de usar uma data relativa e encurtar o nome da filial assim:
O que fornece saída:
Eu recomendo criar um arquivo Bash para adicionar todos os seus aliases favoritos e depois compartilhar o script para sua equipe. Aqui está um exemplo para adicionar apenas este:
Em seguida, você pode fazer isso para obter uma lista de filiais locais bem formatada e classificada:
fonte
Apenas para adicionar ao comentário do @VonC, pegue sua solução preferida e adicione-a à sua lista de alias ~ / .gitconfig por conveniência:
Então um simples "git branchdate" imprime a lista para você ...
fonte
--format='%(authordate)%09%(objectname:short)%09%(refname)'
que obtém o hash curto de cada ramificação também.| tac
, apenas em--sort='authordate'
vez de-authordate
Aqui está o que eu vim depois de também revisar isso .
A
PREV_REF
verificação é para remover duplicatas se mais de uma ramificação apontar para o mesmo commit. (Como em uma filial local que também existe no controle remoto.)NOTA de que pelo pedido OP,
git branch --merged
egit branch --no-merged
são úteis na identificação de quais ramos podem ser facilmente eliminados.[ https://git-scm.com/docs/git-branch]
fonte
Ramificações remotas classificadas e a data da última confirmação para cada ramificação.
fonte
Eu fiz duas variantes, com base na resposta de VonC .
Minha primeira variante:
Isso lida com branches locais e remotos (
-a
), lida com o estado de cabeça destacada (o comando sed mais longo, embora a solução seja meio grosseira - apenas substitui as informações da ramificação desanexada pela palavra-chave HEAD), adiciona o assunto de confirmação (% s ) e coloca as coisas em colunas por meio de caracteres de pipe literal na string de formato e passando o resultado final paracolumn -t -s "|"
. (Você pode usar o que quer que seja como separador, desde que seja algo que você não espera no restante da saída.)Minha segunda variante é bastante hacky, mas eu realmente queria algo que ainda tivesse um indicador de "este é o ramo em que você está atualmente", como o comando branch faz.
Isso transforma o
*
que marca o ramo atual em uma palavra-chave e, quando o corpo do loop vê a palavra-chave, define um sinalizador e não gera nada. O sinalizador é usado para indicar que uma formatação alternativa deve ser usada para a próxima linha. Como eu disse, é totalmente hacky, mas funciona! (Principalmente. Por alguma razão, minha última coluna está sendo superada pela linha de ramo atual.)fonte
git for-each-ref
é a maneira amigável de script de processar ramificações. Você precisaria executar o simbólico-ref uma vez para obter a ramificação atual.Eu fiz um alias simples, não tenho certeza se é exatamente isso que foi solicitado, mas é simples
Fiz isso como queria listar todos os ramos, não apenas os ramos locais, que os comandos acima fazem apenas
alias git_brs="git fetch && git branch -av --format='\''%(authordate)%09%(authordate:relative)%09%(refname)'\'"
Você pode canalizar acima
grep origin
para obter apenas origensIsso lista todos os ramos, juntamente com a última data de modificação, me ajuda a decidir qual deles devo extrair para a versão mais recente
Isso resulta no tipo de exibição abaixo
Tente e deixe-me saber se ajudou, feliz
fonte
Ou você pode usar meu script PHP, https://gist.github.com/2780984
fonte
Aqui está uma função que você pode adicionar ao seu bash_profile para facilitar isso.
Uso quando em um repositório Git:
branch
imprime todas as filiais locaisbranch -r
imprime todas as ramificações remotasFunção:
fonte
No PowerShell, o seguinte mostra ramificações no controle remoto que já foram mescladas e com pelo menos duas semanas (o
author:relative
formato começa a exibir semanas em vez de dias em duas semanas):fonte