Как использовать git log --oneline в gitpython

Я пытаюсь извлечь список сообщений фиксации, указав начальный ша и конечный ша. В git это легко сделать с помощью git log. Но я пытаюсь сделать это через библиотеку gitpython. Может ли кто-нибудь помочь мне достичь этого?

в Git команда выглядит так:

git log --oneline d3513dbb9f5..598d268f

как мне это сделать с gitpython?


person sbkhbk    schedule 05.03.2019    source источник


Ответы (3)


Вы можете попробовать PyDriller (оболочку для GitPython), это проще:

for commit in RepositoryMining("path_to_repo", from_commit="STARTING COMMIT", to_commit="ENDING_COMMIT").traverse_commits():
    print(commit.msg)

Если вам нужны коммиты конкретной ветки, добавьте параметр only_in_branch="BRANCH_NAME". Документы: http://pydriller.readthedocs.io/en/latest/

person Davide Spadini    schedule 06.03.2019

Функция GitPython Repo.iter_commits() (docs) поддерживает диапазоны фиксации в стиле ref-parse. Итак, вы можете сделать:

import git
repo = git.Repo("/path/to/your/repo")
commits = repo.iter_commits("d3513dbb9f5..598d268f")

Все после этого зависит от точного форматирования, которое вы хотите получить. Если вы хотите что-то похожее на git log --oneline, это поможет (это упрощенная форма, имена тегов/ветвей не показаны):

for commit in commits:
    print("%s %s" % (commit.hexsha, commit.message.splitlines()[0]))
person imphil    schedule 04.09.2019

Вы можете использовать чистый gitpython:

import git
repo = git.Repo("/home/user/.emacs.d") # my .emacs repo just for example
logs = repo.git.log("--oneline", "f5035ce..f63d26b")

дам тебе:

>>> logs
'f63d26b Fix urxvt name to match debian repo\n571f449 Add more key for helm-org-rifle\nbea2697 Drop bm package'

если вы хотите хороший вывод, используйте красивую печать:

from pprint import pprint as pp
>>> pp(logs)
('f63d26b Fix urxvt name to match debian repo\n'
 '571f449 Add more key for helm-org-rifle\n'
 'bea2697 Drop bm package')

Обратите внимание, что logs равно str, если вы хотите сделать его списком, просто используйте logs.splitlines()

Gitpython имел почти все похожие API с git. Например, repo.git.log вместо git log и repo.git.show вместо git show. Подробнее читайте в Справочнике по API Gitpython.

person azzamsa    schedule 06.04.2019