Git Python не может найти коммит - PullRequest
2 голосов
/ 27 апреля 2011

Я не могу найти коммит, на который указывает тег, с помощью дерева коммитов.В этом конкретном примере я использую веб-репозиторий Tornado, клонированный непосредственно из Github.

import sys
import git

if len(sys.argv) < 2:
    print 'python git_test.py <repo path>'
    sys.exit(0)

repo = git.Repo(sys.argv[1])
commits = {}

for git_commit in repo.iter_commits():
    commits[git_commit.hexsha] = git_commit

print len(commits)

for git_tag in repo.tags:
    print 'Tag %s points to Commit %s' % (
        git_tag.name,
        commits[git_tag.commit.hexsha]
    )

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

ian@ian-EP45-UD3L:~/code/playground$ python git_test.py ~/code/tornado/
459
Tag v1.0.0 points to Commit eb5b3d8df7a305ac1ffa0a12c813e5d7ee4d6cd3
Traceback (most recent call last):
  File "git_test.py", line 19, in <module>
    commits[git_tag.commit.hexsha]
KeyError: '2b5064b7ed962603ade0db0c8e21846a9879e30e'

Я что-то делаю неправильно, как я могу обойти эту проблему?Любая помощь приветствуется!

Я использую git-python v0.3.1.

1 Ответ

5 голосов
/ 27 апреля 2011

Я раньше не использовал gitpython, поэтому мне было любопытно, и я попробовал ваш сценарий на фиктивном репо.Я не получил никакой ошибки и теги напечатаны правильно.Но у меня было подозрение:

Я добавил ветку, добавил коммит и отметил его.Затем он выдал ошибку, которую вы получили, и все стало очевидным.

repo.iter_commits() получает только коммиты в текущей ветке.Таким образом, любой тег для фиксации в другой ветке не будет иметь фиксации в commits.Я попытался изменить ветку на новую, которую я создал, и она не смогла сказать, что не был найден другой коммит, который, конечно, был в мастере в моем фиктивном репо.Вам нужно найти способ получить все коммиты из всех ветвей.

PS: Вы знаете, что собираетесь использовать окольный способ получить коммит, на который указывает тег?

...