2016-02-03 2 views
0

В сценарии python, который я хотел бы выполнить из какого-либо произвольного местоположения в рабочем дереве git-репозиториев, в каком-то произвольном репозитории git, и я бы хотел использовать GitPython для извлеките некоторую информацию об упомянутом репозитории.gitpython открыть репозиторий от somwhere в репозитории

Я могу получить информацию, которая мне нужна из объекта Repo, но я не могу понять, как открыть объект Repo, но конструктор Repo требует пути к репо-корню.

Есть ли способ построить объект 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()) 
+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 не будет пересекать границу файловой системы в своей конфигурации по умолчанию, тогда как вышеприведенный код будет всегда перебираться до /.

Смежные вопросы