Python git模块无效的git存储库错误

时间:2016-03-11 20:00:40

标签: python git

我有一个脚本放在文件夹结构中:

~/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()

4 个答案:

答案 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中解决了这个问题