328 votes

Comment déterminer par programme le courant extrait Git branch

Dans un Unix ou GNU environnement de script (par exemple une distribution Linux, Cygwin, OSX), quelle est la meilleure façon de déterminer qui Git branch est extrait dans un répertoire de travail?

Une utilisation de cette technique serait automatiquement l'étiquetage d'une libération (comme svnversion ferait avec de la Subversion).

Veuillez également vous reporter à ma question connexe: procédure de programmation pour déterminer si un Git checkout est un tag, et si oui quel est le nom de la balise?

345voto

Jakub Narębski Points 87537

La bonne solution est de prendre un coup d'oeil à contrib/achèvements/git-achèvement.bash n'est que pour l'invite bash en __git_ps1. Suppression de tous les extras, comme la sélection de la façon de décrire détaché de la TÊTE de situation, c'est à dire lorsque nous sommes sur sans nom de la branche, c'est:

branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||
branch_name="(unnamed branch)"     # detached HEAD

branch_name=${branch_name##refs/heads/}

git symbolique-ref est utilisé pour extraire pleinement qualifié du nom de la branche de référence symbolique; nous l'utilisons pour la TÊTE, qui est sorti de la branche.

Solution alternative pourrait être:

branch_name=$(git symbolic-ref -q HEAD)
branch_name=${branch_name##refs/heads/}
branch_name=${branch_name:-HEAD}

lorsque, dans la dernière ligne nous avons affaire avec le détachement de la TÊTE de situation, en utilisant simplement "TÊTE" pour désigner ce type de situation.


Ajouté 11-06-2013

Junio C. Hamano (git responsable) post de blog, la Vérification de la branche courante, par programmation, à partir du 10 juin 2013 explique pourquoi (et comment) plus en détail.

240voto

Michael Erickson Points 771

Personne ne vois rien de mal avec juste demander à Git pour décrire la direction générale, vous êtes sur?

git rev-parse --symbolic-full-name --abbrev-ref HEAD

Qui peut être utilisé à l'intérieur de $() et passe facilement dans Bash, Powershell, Perl, etc. Il n'est pas dupe, si vous avez plusieurs branches sur le commit sur lequel vous êtes, et si vous n'êtes pas sur une branche, il suffit simplement de réponses avec "la TÊTE".

Alternativement, vous pouvez utiliser

git symbolic-ref --short -q HEAD

Ce qui vous donnera le même résultat, mais elle ne retourne rien du tout si vous êtes détaché. Celui-ci est utile si vous voulez une erreur lorsqu'il est détaché si, il suffit de retirer l'-q.

56voto

jonny Points 1062
Vous pouvez utiliser

41voto

Johnny Utahh Points 422

De cette réponse : http://stackoverflow.com/a/1418022/605356 :

Fonctionne apparemment avec Git 1.6.3 ou plus récent.

10voto

tjb Points 2869

adapter la réponse acceptée à windows powershell :

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