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