GitPython: git.diff(commit_a, commit_b) всегда возвращает пустую строку

Когда я пытаюсь следующий код, используя GitPython:

repo.head.commit.diff('HEAD~1')[0].diff

Всегда возвращает пустую строку. Я много раз менял файл, также пытался в разных коммитах.

Я также попробовал следующий код, который бы перечислял все измененные файлы между первым и последним коммитами.

changed_files = []

for x in commits_list[0].diff(commits_list[-1]):
    if x.a_blob.path not in changed_files:
        changed_files.append(x.a_blob.path)

    if x.b_blob is not None and x.b_blob.path not in changed_files:
        changed_files.append(x.b_blob.path)

print changed_files

1 ответ

Решение

Из документов (pydoc git.Commit).

 |  Methods inherited from git.diff.Diffable:
 |  
 |  diff(self, other=<class 'git.diff.Index'>, paths=None, create_patch=False, **kwargs)
 [...]
 |      :param create_patch:
 |              If True, the returned Diff contains a detailed patch that if applied
 |              makes the self to other. Patches are somwhat costly as blobs have to be read
 |              and diffed.

Так что, если мы повторим ваш код, мы получим пустой diff атрибут:

>>> import git
>>> r = git.Repo('.')
>>> c1 = r.head.commit
>>> c2 = r.commit('HEAD~1')
>>> print c1.diff(c2)[0].diff

Но если мы установим create_patch в True:

>>> print c1.diff(c2, create_patch=True)[0].diff

--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -4593,19 +4593,11 @@ class ComputeManager(manager.Manager):
                 LOG.debug("Updating volume usage cache with totals",
                           instance=instance)
[...]
Другие вопросы по тегам