Ich habe ein Skript, das in einer Ordnerstruktur als solche platziert ist:
~/wofc/folder1/folder2/script.py
script.py
verwendet das Git-Modul, um einige Aufgaben zu erledigen. Wenn ich das Skript jedoch von außerhalb ausführe folder2
dh wenn ich habe cd
hinein folder1
ich renne python folder2/script.py arg1 arg2
Ich bekomme die raise InvalidGitRepositoryError(epath)
Error. Das Skript läuft gut, wenn ich es von innen ausführe folder2
dh cd
hinein folder2
und Renn python script.py arg1 arg2
. Unten ist das relevante Code-Snippet. Können Sie mir bitte sagen, was das Problem ist?
git = Repo('{}/..'.format(os.getcwd())).git
git.checkout('master')
git.pull()
Anstatt Repo('{}/..'.format(os.getcwd())).git
verwenden os.path.abspath
:
git = Repo(os.path.abspath('{}/..'.format(os.getcwd())).git
git.checkout('master')
git.pull()
Laufen git commands
sollte der aktuelle Ordner a git repo
.
.git
repo sollte vorhanden sein, um Git-Befehle auszuführen.
Das ist der Grund für den Fehler.
Das Problem ist, dass Sie verwenden os.getcwd()
die das aktuelle Arbeitsverzeichnis zurückgibt. Wenn Sie gerade draußen stehen folder2
diese Funktion kehrt zurück ~/wofc/folder1
.
Sie sollten es gegen etwas austauschen wie:
import os
os.path.dirname(os.path.abspath(__file__))
Zum Beispiel so:
import os
path = os.path.dirname(os.path.abspath(__file__))
git = Repo('{}/..'.format(path)).git
git.checkout('master')
git.pull()

qneill
Wie user1846747 sagte, benötigt gitPython ein Repo-Objekt, um einen Git-Befehl auszuführen.
Dies ist ein klassisches Bootstrap-Problem (Huhn-und-Ei-Problem): „Wie kann ich einen Git-Befehl ausführen, der GitPython ausführt, um herauszufinden, wo sich der Repo-Stamm befindet, wenn ich wissen muss, wo der Stamm ist, um ein Repo-Objekt zu erstellen, um einen Git-Befehl auszuführen ?”
@MaxNoe löste dies in Finden Sie den Stamm des Git-Repositorys, in dem sich die Datei befindet, mit seinem python-gitpath-Projekt httpsgithub.com/MaxNoe/python-gitpath
9980500cookie-checkPython-Git-Modul Ungültiger Git-Repository-Fehleryes