gitpython从存储库中的somwhere打开存储库

时间:2016-02-03 13:27:12

标签: python git gitpython

在我希望能够从git存储库工作树中的某个任意位置执行的python脚本中,在某个任意git存储库中,我想使用GitPython来提取有关所述存储库的一些信息。

我可以从Repo对象获取所需的信息,但我无法弄清楚如何打开Repo对象,但Repo构造函数需要一个repo-root的路径。

有没有办法构建一个Repo对象,其路径指向repo中的某个位置,而不仅仅是repo-root位置?或者有没有办法查询给定路径的repo根的位置?

我正在寻找类似的东西:

import git
r = git.Repo('whatever repo the cwd is in')

以下作品,但我发现它绝对笨拙:

import git
import subprocess

rtpath = subprocess.check_output(["git", "rev-parse", "--show-toplevel"])
repo = git.Repo(rtpath.strip())

1 个答案:

答案 0 :(得分:0)

一种选择是实现git在内部实现的相同搜索语义...例如,查找.git目录,如果它不存在,chdir up一级,再次检查,等等:

import os
import git

lastcwd=os.getcwd()
while not os.path.isdir('.git'):
    os.chdir('..')
    cwd=os.getcwd()
    if cwd == lastcwd:
        raise OSError('no .git directory')
    lastcwd=cwd

r = git.Repo('.')

以上代码简单化;例如,git不会在其默认配置中遍历文件系统边界,而上述代码将一直迭代到/