Überprüfen Sie, ob das Verzeichnis ein Git-Repository ist (ohne dass Sie dort hinein cd müssen)

Lesezeit: 3 Minuten

Benutzer-Avatar
Rurouniwallace

Was ist ein Shell-Befehl, mit dem ich anhand des vollständigen Verzeichnispfads feststellen kann, ob ein bestimmtes Verzeichnis ein Git-Repository ist oder nicht? Insbesondere würde ich gerne in der Lage sein, dies zu tun, ohne im Verzeichnis zu sein und ohne darin cd zu müssen. Ich würde es auch gerne mit einem Befehl tun können, der ein einfaches “true” oder “false” zurückgibt (ähnlich wie rev-parse –is-inside-work-tree), aber das ist keine Voraussetzung .

  • test -d "$path/.git"

    – Siguza

    15. September 2016 um 18:38 Uhr


  • und auch [[ -d "$PATH/.git" ]] && <other commands>

    – hjpotter92

    15. September 2016 um 18:41 Uhr

  • Sie könnten nach einem .git-Ordner suchen? Oder Sie könnten in das aktuelle Arbeitsverzeichnis cd hinein und dann überprüfen und dann zurück in das aktuelle Arbeitsverzeichnis wechseln?

    – J0B

    15. September 2016 um 18:42 Uhr

  • @Siguza Ich habe das als Lösung betrachtet, aber was ist, wenn das Verzeichnis eigentlich kein Git-Repository ist, sondern nur ein Verzeichnis namens .git enthält? (zB .git enthält nicht ORIG_HEAD, FETCH_HEAD, etc.)

    – Rurouniwallace

    15. September 2016 um 18:47 Uhr

  • @Ataraxia Dann würde ich das in Betracht ziehen gebrochen Git-Repository … aber das ist Ansichtssache. Wenn Sie nur intakte/”gültige” Git-Repositories wollen, testen Sie am besten a git Befehl für Fehlercodes zusätzlich zum .git überprüfen.

    – Siguza

    15. September 2016 um 18:56 Uhr

Benutzer-Avatar
ypnos

Verwenden git -C <path> rev-parse. Es wird 0 zurückgegeben, wenn das Verzeichnis at <path> ist ein Git-Repository und andernfalls ein Fehlercode.

Weiterführende Lektüre:

  • Hinweis: Dies gibt auch 0 für jedes Unterverzeichnis eines Git-Repositorys zurück.

    – Siguza

    15. September 2016 um 18:55 Uhr

  • Genial! Vielen Dank!!

    – Rurouniwallace

    15. September 2016 um 20:29 Uhr

  • git -C <path> rev-parse 2>/dev/null für eine sauberere Skriptintegration

    – Wahrheitsanpasser

    12. November 2020 um 11:11 Uhr

  • Zur Ergänzung der Antwort und Kommentare: git -C $REPO_DIR rev-parse 2>/dev/null exit_code=$(echo $?) if [ "$exit_code" -ne 0 ] ; then echo "$REPO_DIR is not a git repository" fi

    – JBSnorro

    29. April 2021 um 19:29 Uhr


  • @JBSnorro Ich hasse Bash, aber ich frage mich, könntest du nicht auch einfach schreiben if [ "$?" -ne 0 ] ;?

    – ypnos

    29. April 2021 um 19:36 Uhr

Wir können es auch versuchen git status Befehl und wenn die Ausgabe so ist:

fatal: Not a git repository (or any of the parent directories): .git

Dann ist das Verzeichnis kein Git-Repository.

Jedes Verzeichnis im System könnte eine Git-Arbeitskopie sein. Sie können ein Verzeichnis verwenden, als ob es eine enthalten würde .git Unterverzeichnis durch Setzen der GIT_DIR und GIT_WORK_TREE Umgebungsvariablen, um auf einen tatsächlichen Wert zu verweisen .git Verzeichnis und das Stammverzeichnis Ihrer Arbeitskopie, oder verwenden Sie die --git-dir und --work-tree Optionen stattdessen. Siehe die git Manpage für mehr Details.

Zu den Kommentaren von @Walk hinzufügen,
git status wird eine fatale Nachricht ausgeben, wenn es kein Repo ist.
echo $? hilft bei der Erfassung, ob ein FEHLER vorliegt oder nicht. Wenn es dann ein Git-Repo ist echo $? wird 0 sein, sonst ist 128 der Wert

In Betracht ziehen git rev-parse --is-inside-work-tree auch hier (mit entspr -C zuerst auch wenn/wie gewünscht), um zu prüfen, ob es sich um a Arbeitsbaum. Auf diese Weise können Sie zwischen den Fällen “Arbeitsbaum” und “Bare-Repository” unterscheiden:

$ git -C .git rev-parse && echo $?
0
$ git -C .git rev-parse --is-inside-work-tree && echo $?
false
0

Beachten Sie wie immer, dass Sie eine Fehlermeldung erhalten, wenn Sie sich überhaupt nicht in einem Git-Verzeichnis befinden:

$  git -C / rev-parse --is-inside-work-tree
fatal: not a git repository (or any of the parent directories): .git

die Sie vielleicht verwerfen möchten (git ... 2>/dev/null). Seit --is-inside-work-tree Drucke true oder false Sie möchten stdout erfassen oder testen.

Benutzer-Avatar
Brandon MFong

In Unix/Linux-Systemen können Sie ausführen git status und überprüfen Sie den Exit-Code echo $?. Alles andere als 0 würde sagen, dass Sie sich nicht in einem Git-Repo befinden

1227580cookie-checkÜberprüfen Sie, ob das Verzeichnis ein Git-Repository ist (ohne dass Sie dort hinein cd müssen)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy