Während ich versuchte, meine neue Fischschalen- Eingabeaufforderung einzurichten, testete ich schließlich Möglichkeiten, um den Zweignamen zu erhalten, und testete auch, ob ich mich in einem Git-Repository befand. Ich habe festgestellt, dass (1) git rev-parse --abbrev-ref HEAD
, (2) git symbolic-ref HEAD | sed 's/refs\/heads\///'
und (3) git describe --contains --all HEAD
den Trick gut machen.
Ich bin neugierig, weil ich die Einfachheit von (1) liebe , aber in einem neuen und unberührten (gerade git init
ed) Repository gibt es einen "fatalen:" Fehler, während (2) wie beabsichtigt funktioniert, dh mir einen gibt Default - Master als Ausgabe. Die Sache ist, dass selbst bei einem "fatalen:" Fehler der Rückkehrcode 0 ist. Ist das das beabsichtigte Verhalten?
Um zu testen, ob ich mich in einem Git-Repository befand, habe ich einfach getestet, ob das aktuelle Verzeichnis einen Ordner ".git" hat : test -d ".git"
. Rudimentäre Lösung, aber es funktioniert, und es scheint schneller zu sein als mit einem git-Befehl.
Meine Fragen sind also:
- Sollte das nicht "fatal:" mit (1) einen von 0 abweichenden Exit-Code zurückgeben? Wenn es tatsächlich ein Fehler ist, da ich nicht weiß, wie Git-Leute ihre Rückkehrcodes standardisiert haben, wo soll ich ihn melden?
- Ich weiß, wenn ich (1) mit umleitung (
^ /dev/null
für diejenigen, die es nicht wissen,^
ist es dasselbe wie2>
), werde ich den Fehler nicht erhalten, aber es wirdHEAD
anstelle von master angezeigt, aber wenn ichcat .git/HEAD
, bekomme ich :ref: refs/heads/master
. Was soll es wirklich sagen? Mitmaster
bin ich nur unwissend und wählerisch, weil es stattdessen sagen sollteHEAD
? Ich meine im Fall eines geradegit init
ed Repositorys. - Haben Sie während Ihrer Suche nach einer netten Eingabeaufforderung tatsächlich mögliche Lösungen verglichen?
Dies ist der Code, den ich zum Benchmarking (für Fische) verwende:
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
Danke im Voraus!
PS: Die Tools sind die neuesten GNU-Versionen, meine ich sed
, date
und expr
. Es tut mir leid, wenn es zu viele Informationen gibt oder wenn etwas keinen Sinn ergibt. Trage es mit mir. Vielen Dank!
EDIT: Wie jemand in einer Antwort richtig erraten hat, ist der ganze Fehler:
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
fatal:
Fehler. Schwer zu wissen, wie es behandelt werden soll, ohne es lesen zu können. :-)