У меня есть script, который помещается в структуру папок как таковую:
~/wofc/folder1/folder2/script.py
script.py
использует модуль git для выполнения некоторых задач. Однако, когда я запускаю script извне folder2
, то есть когда у меня есть cd
в folder1
, я запускаю python folder2/script.py arg1 arg2
, я получаю ошибку raise InvalidGitRepositoryError(epath)
. script отлично работает, когда я запускаю его изнутри folder2
i.e. cd
в folder2
и запускаю python script.py arg1 arg2
. Ниже приведен соответствующий фрагмент кода. Не могли бы вы сообщить мне, в чем проблема?
git = Repo('{}/..'.format(os.getcwd())).git
git.checkout('master')
git.pull()
Вместо Repo('{}/..'.format(os.getcwd())).git
используйте os.path.abspath
:
git = Repo(os.path.abspath('{}/..'.format(os.getcwd())).git
git.checkout('master')
git.pull()
Для запуска git commands
текущая папка должна быть git repo
.
.git
необходимо выполнить repo для выполнения команд git.
В этом причина ошибки.
Как и user1846747, gitPython требует, чтобы объект Repo запускал команду git.
Это классическая проблема начальной загрузки (проблема с курицей и яйцом): "Как я могу запустить команду git, запускающую gitPython, чтобы найти, где находится корень Repo, когда мне нужно знать, где корень должен создать объект Repo для запуска команды git?
@MaxNoe решил это в Найти корень репозитория git, где файл живет, с его проектом python-gitpath httpsgithub.com/MaxNoe/python-gitpath
Проблема заключается в том, что вы используете os.getcwd()
, который возвращает текущий рабочий каталог. Если вы стоите снаружи folder2
, эта функция вернет ~/wofc/folder1
.
Вы должны поменять его на что-то вроде:
import os
os.path.dirname(os.path.abspath(__file__))
Например, например:
import os
path = os.path.dirname(os.path.abspath(__file__))
git = Repo('{}/..'.format(path)).git
git.checkout('master')
git.pull()