2016-02-03 41 views
0

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

我可以从回购对象获取所需的信息,但我无法弄清楚如何打开回购对象,但回购构造函数需要回购根的路径。

有没有办法构建一个回购对象的路径,而不仅仅是回购根位置?或者,有没有办法查询给定路径的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()) 
+0

请重新说明你正在尝试做什么,以及你卡在哪里。目前你的问题是非常不清楚的。 – Joost

回答

0

一种选择是执行相同的搜索语义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将不会遍历默认配置中的文件系统边界,而上面的代码将始终迭代至/