En essayant de mettre en place mon nouveau poisson Shell rapidement, j'ai fini par tester des façons d'obtenir le nom de la branche et aussi de tester si j'étais sur un dépôt git. J'ai trouvé (1) git rev-parse --abbrev-ref HEAD
, (2) git symbolic-ref HEAD | sed 's/refs\/heads\///'
y (3) git describe --contains --all HEAD
font très bien l'affaire.
Je suis curieux parce que j'aime la simplicité de (1) mais sur un site neuf et intact (tout juste git init
ed), il me donne une erreur "fatal :", alors que (2) fonctionne comme prévu, c'est-à-dire qu'il me donne une valeur par défaut. maître comme sortie. Le problème est que, même avec une erreur "fatal :", le code de retour est 0. Est-ce le comportement souhaité ?
Pour tester si je me trouvais dans un dépôt git, j'ai fini par simplement tester si le répertoire courant avait un dossier ".git" : test -d ".git"
. Solution rudimentaire, mais qui fonctionne, et qui semble plus rapide que l'utilisation de n'importe quelle commande git.
Donc, mes questions sont :
- Ne devrait-il pas y avoir ce "fatal :" avec (1) renvoie un code de sortie différent de 0 ? Si c'est effectivement un bogue, puisque je ne sais pas comment les gens de git ont standardisé leurs codes de retour, où dois-je le signaler ?
- Je sais que si je redirige (1) avec
^ /dev/null
(pour ceux qui ne le savent pas,^
est la même chose que2>
), je n'obtiendrai pas l'erreur, mais le message suivant apparaîtraHEAD
au lieu de maître, mais si jecat .git/HEAD
j'obtiens :ref: refs/heads/master
. Que devrait-il vraiment dire ? Avecmaster
Je suis juste ignorant et pointilleux, parce que ça devrait plutôt direHEAD
? Je veux dire dans le cas d'un justegit init
dépôt d'archives. - Avez-vous réellement évalué toutes les solutions possibles au cours de votre quête d'une bonne invite ?
Voici le code que j'utilise pour faire du benchmarking (pour les poissons) :
set -l before (date +%s%N)
git rev-parse --abbrev-ref HEAD
set -l after (date +%s%N)
set -l elapsed_time (expr $after - $before)
echo $elapsed_time
Merci d'avance !
PS : Les outils sont les dernières versions GNU, je veux dire, sed
, date
y expr
. Je suis désolé s'il y a trop d'informations ou si quelque chose n'a pas de sens. Soyez indulgent avec moi. Merci.
EDITAR: Comme quelqu'un l'a correctement deviné dans une réponse, l'erreur entière est :
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions