Je dois supprimer les anciennes branches non maintenues de notre référentiel distant. J'essaie de trouver un moyen de lister les succursales distantes par leur dernière date de modification, et je ne peux pas.
Existe-t-il un moyen simple de répertorier les branches distantes de cette manière?
git
maintenance
administration
branch
Roni Yaniv
la source
la source
Réponses:
commandlinefu a 2 propositions intéressantes:
ou:
C'est pour les branches locales, dans une syntaxe Unix. En utilisant
git branch -r
, vous pouvez afficher de la même manière les branches distantes:Michael Forrest mentionne dans les commentaires que zsh nécessite des échappements pour l'
sed
expression:kontinuity ajoute dans les commentaires :
En plusieurs lignes:
Remarque: la réponse de n8tr , basée sur est plus propre. Et plus vite . Voir aussi " Option de nom uniquement pour ? "
git for-each-ref refs/heads
git branch --list
Plus généralement, tripleee nous rappelle dans les commentaires :
(J'ai illustré ce point en 2014 avec " Quelle est la différence entre
$(command)
et`command`
dans la programmation shell? ")la source
/json
à la fin de n'importe quelle URL commandlinefu.com et vous obtiendrez toutes les commandes au format JSON.Voici ce que j'utilise:
Voici la sortie:
Pour les branches distantes, utilisez simplement "refs / remotes" au lieu de "refs / heads":
En vous basant sur la réponse de n8tr , si vous êtes également intéressé par le dernier auteur de la branche, et si vous disposez de l'outil "colonne", vous pouvez utiliser:
Ce qui vous donnera:
Vous pouvez appeler "git fetch --prune" avant d'avoir les dernières informations.
la source
authordate
(ce qui semble être lorsque la branche a été créée pour la première fois?). Si vous passezauthordate
à,committerdate
vous verrez les dates du dernier commit dans chaque branche. Comme ça:git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/heads
À partir d' Olivier Croquette , j'aime utiliser une date relative et raccourcir le nom de la succursale comme ceci:
Ce qui vous donne une sortie:
Je recommande de créer un fichier Bash pour ajouter tous vos alias préférés, puis de partager le script avec votre équipe. Voici un exemple pour ajouter seulement celui-ci:
Ensuite, vous pouvez simplement le faire pour obtenir une liste de branches locales bien formatée et triée:
la source
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é:
Puis un simple "git branchdate" imprime la liste pour vous ...
la source
--format='%(authordate)%09%(objectname:short)%09%(refname)'
qui récupère également le hachage court de chaque branche.| tac
, juste--sort='authordate'
au lieu de-authordate
Voici ce que j'ai trouvé après avoir également examiné cela .
La
PREV_REF
vérification consiste à supprimer les doublons si plus d'une branche pointe vers le même commit. (Comme dans une branche locale qui existe également dans la télécommande.)Notez que par la demande OP,
git branch --merged
etgit branch --no-merged
sont utiles pour identifier les branches qui peuvent être facilement supprimées.[ https://git-scm.com/docs/git-branch]
la source
Branches distantes triées et date de la dernière validation pour chaque branche.
la source
J'ai fait deux variantes, basées sur la réponse de VonC .
Ma première variante:
Cela gère les branches locales et distantes (
-a
), gère l'état de tête détachée (la commande sed plus longue, bien que la solution soit un peu grossière - elle remplace simplement les informations de la branche détachée par le mot clé HEAD), ajoute le sujet de validation (% s ), et met les choses dans des colonnes via des caractères de tube littéraux dans la chaîne de format et en passant le résultat final àcolumn -t -s "|"
. (Vous pouvez utiliser n'importe quoi comme séparateur, du moment que c'est quelque chose que vous ne vous attendez pas dans le reste de la sortie.)Ma deuxième variante est assez piratée, mais je voulais vraiment quelque chose qui a toujours un indicateur de "c'est la branche sur laquelle vous êtes actuellement" comme le fait la commande branch.
Cela transforme le
*
qui marque la branche actuelle en un mot-clé, et lorsque le corps de la boucle voit le mot-clé, il définit à la place un indicateur et ne produit rien. L'indicateur est utilisé pour indiquer qu'une mise en forme alternative doit être utilisée pour la ligne suivante. Comme je l'ai dit, c'est totalement hacky, mais ça marche! (Surtout. Pour une raison quelconque, ma dernière colonne se fait distancer sur la ligne secondaire actuelle.)la source
git for-each-ref
est la manière conviviale de traiter les branches. Vous devrez exécuter symbolic-ref une fois pour obtenir la branche actuelle.J'ai fait un simple alias, je ne sais pas si c'est exactement ce que j'ai demandé, mais c'est simple
J'ai fait cela car je voulais lister toutes les branches et pas seulement mes branches locales, ce que les commandes ci-dessus ne font que
alias git_brs="git fetch && git branch -av --format='\''%(authordate)%09%(authordate:relative)%09%(refname)'\'"
Vous pouvez diriger ci-dessus
grep origin
pour obtenir uniquement les originesCela répertorie toutes les branches avec la dernière date de modification, m'aide à décider laquelle je dois tirer pour la dernière version
Il en résulte un type d'affichage ci-dessous
Essayez de me faire savoir si cela a aidé, joyeux gitting
la source
Ou vous pouvez utiliser mon script PHP, https://gist.github.com/2780984
la source
Voici une fonction que vous pouvez ajouter à votre bash_profile pour vous faciliter la tâche.
Utilisation dans un référentiel Git:
branch
imprime toutes les succursales localesbranch -r
imprime toutes les branches distantesFonction:
la source
Dans PowerShell, ce qui suit montre les branches de la télécommande qui sont déjà fusionnées et qui datent d'au moins deux semaines (le
author:relative
format commence à afficher des semaines au lieu de jours à deux semaines):la source