我有一个脚本放在文件夹结构中:
~/wofc/folder1/folder2/script.py
script.py
使用git模块执行某些任务。但是,当我从folder2
之外运行脚本时,即当我cd
进入folder1
我运行python folder2/script.py arg1 arg2
时,我收到raise InvalidGitRepositoryError(epath)
错误。当我从folder2
内部(cd
运行到folder2
并运行python script.py arg1 arg2
时,该脚本运行正常。以下是相关的代码段。你能告诉我这是什么问题吗?
git = Repo('{}/..'.format(os.getcwd())).git
git.checkout('master')
git.pull()
答案 0 :(得分:1)
而不是Repo('{}/..'.format(os.getcwd())).git
,请使用os.path.abspath
:
git = Repo(os.path.abspath('{}/..'.format(os.getcwd())).git
git.checkout('master')
git.pull()
答案 1 :(得分:1)
要运行git commands
,当前文件夹应为git repo
。
.git
repo来执行git命令。
这就是错误的原因。
答案 2 :(得分:1)
问题是您使用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()
答案 3 :(得分:1)
正如user1846747所说,gitPython需要一个Repo对象来运行git命令。
这是一个经典的引导问题(鸡和鸡蛋问题):"如何运行git命令运行gitPython来查找Repo根的位置,当我需要知道root用户创建回购的位置时对象运行git命令?"
@MaxNoe使用他的python-gitpath项目httpsgithub.com/MaxNoe/python-gitpath
在Find the root of the git repository where the file lives中解决了这个问题