GitPython 在存储库中从 somwhere 打开一个存储库



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

我可以从 Repo 对象

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

有没有办法构造一个存储库对象,其中包含指向存储库中某处的路径,而不仅仅是存储库根位置? 或者,有没有办法查询给定路径的存储库根目录的位置?

我正在寻找类似的东西:

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

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

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不会遍历默认配置中的文件系统边界,而上面的代码将始终迭代到/

最新更新