Je veux obtenir une liste de toutes les branches d'un dépôt Git avec les branches les plus récentes en haut, où la branche la plus récente est celle qui a été commise le plus récemment (et est donc plus susceptible d'être celle à laquelle je veux prêter attention).
Existe-t-il un moyen d'utiliser Git pour (a) trier la liste des branches par dernier commit, ou (b) obtenir une liste des branches avec la date du dernier commit de chacune d'elles, dans un format lisible par une machine ?
Dans le pire des cas, je pourrais toujours courir git branch
pour obtenir une liste de toutes les branches, analyser sa sortie, et ensuite git log -n 1 branchname --format=format:%ci
pour chacune d'entre elles, pour obtenir la date de livraison de chaque branche. Mais cela fonctionnera sur une machine Windows, où la création d'un nouveau processus est relativement coûteuse, donc lancer l'exécutable Git une fois par branche pourrait être lent s'il y a beaucoup de branches. Existe-t-il un moyen de faire tout cela avec une seule commande ?
3 votes
stackoverflow.com/a/2514279/1804124 A une meilleure réponse.
18 votes
@Spundun, vous m'avez perdu là. En quoi une combinaison de plusieurs commandes, y compris des choses passées par perl et sed, est-elle "meilleure" que l'utilisation d'une commande que Git possède déjà ?
1 votes
Parce qu'avec la réponse ici, je n'ai pas obtenu toutes les branches dans le repo. Dans mon cas particulier, la réponse me donnait une branche et la réponse ici me donnait une vingtaine de branches (avec l'option -r).
50 votes
@Spundun concernant la réponse avec
git for-each-ref
de Jakub Narebski : vous pouvez obtenir des branches distantes en passant parrefs/remotes/
au lieu derefs/heads/
(ou vous pouvez passer les deux, séparés par des espaces) ;refs/tags/
pour les balises, ou simplementrefs/
pour les trois types.10 votes
A partir de git 2.7 (Q4 2015), plus de
for-each-ref
! Vous utiliserez directementgit branch --sort=-committerdate
: voir ma réponse ci-dessous0 votes
@VonC, voulez-vous dire
for-each-ref
ne sera plus disponible, ou simplement qu'il ne sera plus nécessaire ici parce qu'il y aura un meilleur moyen ?1 votes
@JoeWhite il sera toujours disponible, mais une partie de sa sémantique sera directement accessible depuis la branche git elle-même.
1 votes
J'ai terminé ma réponse ci-dessous lorsque la comparaison ne permet pas de départager les branches (par exemple, un même horodatage parce qu'elles ont été commises ensemble), il se rabat sur la comparaison alphabétique.
1 votes
Peut-être un doublon de stackoverflow.com/questions/9236219/
0 votes
Existe-t-il un moyen d'y parvenir sans cloner, à la manière de
git ls-remote
?