Как получить имя автора коммита и адрес электронной почты с gitpython? - PullRequest
1 голос
/ 25 октября 2019

Когда я запускаю git log, я получаю строку this для каждого коммита: «Автор: имя ». Как получить точно такой же формат для коммита в Python для локального репо? Когда я запускаю приведенный ниже код, я получаю только имя автора.

from git import Repo

repo_path = 'mockito'
repo = Repo(repo_path)

commits_list = list(repo.iter_commits())

for i in range(5):
    commit = commits_list[i]

    print(commit.hexsha)
    print(commit.author)
    print(commit.committer)

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Похоже, что объекты gitpython Commit не имеют атрибута для электронного письма автора.

Вы также можете использовать gitpython для непосредственного вызова команд git . Вы можете использовать команду git show, передавая коммит HASH (от commit.hexsha), а затем опцию --format, которая дает вам только имя автора и адрес электронной почты (выможет, конечно, передать другие опции формата, которые вам нужны).

Использование простого git:

$ git show -s --format='%an <%ae>' 4e13ccfbde2872c23aec4f105f334c3ae0cb4bf8
me <me@somewhere.com>

Использование gitpython для использование git напрямую :

from git import Repo

repo_path = 'myrepo'
repo = Repo(repo_path)

commits_list = list(repo.iter_commits())
for i in range(5):
    commit = commits_list[i]

    author = repo.git.show("-s", "--format=Author: %an <%ae>", commit.hexsha)
    print(author)
3 голосов
/ 25 октября 2019

Согласно документации API gitpython , объект фиксации - экземпляр class git.objects.commit.Commit - имеет author и committer атрибуты, которые являются экземплярами class git.util.Actor, который, в свою очередь, имеет поля conf_email, conf_name, email и name.

Следовательно (не проверено):

print(commit.author.name, commit.author.email)

вероятнополучите два поля, которые вы хотите, хотя вы можете отформатировать их каким-либо образом.

Редактировать : я отложу ответ Джино Мемпина , так как я неgitpython не установлен, чтобы проверить это.

...