Как получить информацию о каталоге git из репозитория в GitPython? - PullRequest
0 голосов
/ 26 апреля 2019

Я хотел бы получить номер фиксации каталога (называемого модулем) из репозитория (проекта) в GitPython.

> print("before",modulePath) 
> repo = Repo(modulePath)                    
> print(len(list(repo.iter_commits())))

Когда я пытаюсь распечатать каталог с количеством коммитов,В нем говорится, что репозиторий не является действительным репозиторием./ модуль

Любая помощь или идея приветствуются :) Спасибо

1 Ответ

0 голосов
/ 26 апреля 2019

Это пример кода из одного из моих старых проектов (не открытый, поэтому нет ссылок на репозиторий):

def parse_commit_log(repo, *params):
    commit = {}
    try:
        log = repo.git.log(*params).split("\n")
    except git.GitCommandError:
        return

    for line in log:
        if line.startswith("    "):
            if not 'message' in commit:
                commit['message'] = ""
            else:
                commit['message'] += "\n"
            commit['message'] += line[4:]
        elif line:
            if 'message' in commit:
                yield commit
                commit = {}
            else:
                field, value = line.split(None, 1)
                commit[field.strip(":")] = value
    if commit:
        yield commit

Пояснение:

Функция ожидает экземпляр Repo и те же параметры, которые вы передадите команде git log. Итак, использование в вашем случае может выглядеть так:

repo = git.Repo('project_path')
commits = list(parse_commit_log(repo, 'module_dir'))

Внутренне repo.git.log вызывает команду git log. Его вывод выглядит примерно так:

commit <commit1 sha>
Author: User <username@email.tld>
Date:   Sun Apr 7 17:08:31 2019 -0400

    Commit1 message

commit <commit2 sha>
Author: User2 <username2@email.tld>
Date:   Sun Apr 7 17:08:31 2019 -0400

    Commit2 message

parse_commit_log анализирует этот вывод и выдает сообщения о фиксации. Вам нужно добавить еще несколько строк, чтобы получить коммит sha, автора и дату, но это не должно быть слишком сложно.

...