gitpython открыть репозиторий откуда-то внутри репозитория

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

Я могу получить нужную мне информацию из объекта 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())

person Spacemoose    schedule 03.02.2016    source источник
comment
Пожалуйста, перефразируйте то, что вы пытаетесь сделать, и где вы застряли. В настоящее время ваша проблема крайне неясна.   -  person Joost    schedule 03.02.2016


Ответы (1)


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

person larsks    schedule 03.02.2016