2014-12-10 2 views
1

Я использую рекомендуемые GitPython module, , но я не могу понять, как построить следующую команду:как построить GIT дифф запрос в питоне

git diff --name-status ec04352 b945e6c 

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

ответ

1

См. Obtaining Diff Information в руководстве GitPython для нескольких примеров того, как получить информацию о различии между двумя коммитами.

hcommit = repo.head.commit 
idiff = hcommit.diff()   # diff tree against index 
tdiff = hcommit.diff('HEAD~1') # diff tree against previous tree 
wdiff = hcommit.diff(None)  # diff tree against working tree 

Эти команды возвращают DiffIndex, которые содержат iter_change_type, которые вы можете позвонить с каждым из четырех различных типов изменений ('A', 'D', 'R', 'M'), чтобы получить пути, которые были изменены (добавлены, удалены, переименованы, изменены).

3

Это один из способов сделать это:

import git 

repo = git.Repo('path/to/your/repo') 
print repo.git.diff('ec04352', 'b945e6c', **{'name-status': True}) 

Это, однако, пройдя через заднюю дверь.

Вы должны быть в состоянии сделать что-то вроде этого:

a = repo.commit('ec04352') 
b = repo.commit('b945e6c') 
diffs = a.diff(b) 

>>> a 
<git.Commit "ec04352"> 
>>> b 
<git.Commit "b945e6c"> 
>>> print diffs[0] 
zip/JSONzip.java 
======================================================= 
lhs: 100644 | d8e3ac652a5a5158692fa5fc131340c03dffd08e 
rhs: 100644 | 220686de3dcb0dd17a54cbc5f8e44df261b664d5 
>>> 

Вы должны будете играть с Diff объекта, чтобы выяснить разницу.

Смежные вопросы