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 inited) 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/nullfür diejenigen, die es nicht wissen,^ist es dasselbe wie2>), werde ich den Fehler nicht erhalten, aber es wirdHEADanstelle von master angezeigt, aber wenn ichcat .git/HEAD, bekomme ich :ref: refs/heads/master. Was soll es wirklich sagen? Mitmasterbin ich nur unwissend und wählerisch, weil es stattdessen sagen sollteHEAD? Ich meine im Fall eines geradegit inited 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, dateund 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. :-)