163 votes

Lister chaque branche et la date de sa dernière révision dans git

Je dois supprimer les branches anciennes et non gérées de notre dépôt distant. J'essaie de trouver un moyen de lister les branches distantes par leur dernière date de modification, et je ne peux pas.

Est-ce que quelqu'un connaît un moyen simple de lister les branches distantes de cette manière?

192voto

VonC Points 414372

commandlinefu a 2 intéressantes propositions:

for k in `git branch | perl -pe s/^..//`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r

ou:

for k in `git branch | sed s/^..//`; do echo -e `git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k --`\\t"$k";done | sort

C'est pour les branches locales, dans une syntaxe Unix. À l'aide de git branch -r, vous pouvez même afficher les branches distantes:

for k in `git branch -r | perl -pe 's/^..(.*?)( ->.*)?$/\1/'`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r

Michael Forrest mentionne dans les commentaires que zsh nécessite échappe pour l' sed expression:

for k in git branch | perl -pe s\/\^\.\.\/\/; do echo -e git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1\\t$k; done | sort -r 

142voto

ocroquette Points 126

Voici ce que j'utilise:

 git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:iso8601)%09%(refname)' refs/heads
 

C'est la sortie:

 2014-01-22 11:43:18 +0100       refs/heads/master
2014-01-22 11:43:18 +0100       refs/heads/a
2014-01-17 12:34:01 +0100       refs/heads/b
2014-01-14 15:58:33 +0100       refs/heads/maint
2013-12-11 14:20:06 +0100       refs/heads/d/e
2013-12-09 12:48:04 +0100       refs/heads/f
 

32voto

n8tr Points 686

Construction de Olivier Croquette, j'aime utiliser une date relative et de raccourcir le nom de la branche comme ceci:

git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads

Qui vous donne de sortie:

21 minutes ago  nathan/a_recent_branch
6 hours ago     master
27 hours ago    nathan/some_other_branch
29 hours ago    branch_c
6 days ago      branch_d

Je vous recommande de créer un fichier bash pour ajouter toutes vos préférées des alias et puis partage le script à votre équipe. Voici un exemple d'ajouter celui-ci:

#!/bin/sh

git config --global alias.branches "!echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------'"

Ensuite, vous pouvez simplement le faire pour obtenir un bien mis en forme et triés branche locale de la liste:

git branches

21voto

yngve Points 371

Juste pour ajouter au commentaire de @VonC, prenez votre solution préférée et ajoutez-la à votre liste d'alias ~ / .gitconfig pour plus de commodité:

 [alias]  
    branchdate = !git for-each-ref --sort='-authordate' --format='%(refname)%09%(authordate)' refs/heads | sed -e 's-refs/heads/--'
 

Ensuite, un simple "git branchdate" imprime la liste pour vous ...

0voto

Ou vous pouvez utiliser mon script php https://gist.github.com/2780984

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X