I am using this for loop to loop through all commits:
repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")
for commit in list(repo.iter_commits()):
print commit.files_list # how to do that ?
How can I get a list with the files affected from this specific commit ?
asked Sep 26, 2016 at 16:21
dimitris93
4,30512 gold badges54 silver badges93 bronze badges
4 Answers 4
Try it
for commit in list(repo.iter_commits()):
commit.stats.files
answered Nov 12, 2016 at 21:20
Григорий Бернгардт
3561 silver badge6 bronze badges
from git import Repo
repo = Repo('/home/worldmind/test.git/')
prev = repo.commit('30c55d43d143189698bebb759143ed72e766aaa9')
curr = repo.commit('5f5eb0a3446628ef0872170bd989f4e2fa760277')
diff_index = prev.diff(curr)
for diff in diff_index:
print(diff.change_type)
print(f"{diff.a_path} -> {diff.b_path}")
answered Dec 6, 2019 at 8:53
Alexey Shrub
1,31215 silver badges24 bronze badges
3 Comments
BCS
Things get more complicated when
curr has more than one parent. Dealing with that will likely involve something like for prev in curr.parents: but exactly what to do from there is a function of what you are trying to do.BCS
There is also the question of what to do when
curr is an initial commit and doesn't have a parent.BCS
After some more tinkering, it looks like
commit.diff(None) is useful (e.g. with initial commits?) in some cases. But I haven't yet played around with it enough to know the details.commit.stats.files works, but it's very slow. It will take several seconds to process a large commit.
This is much faster:
repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")
for commit in list(repo.iter_commits()):
print(self.repo.git.show(commit.hexsha, name_only=True).split('\n'))
1 Comment
BCS
That works but also generates some "human readable" lines that will need to be filtered.
I solved this problem for SCM Workbench. The important file is:
https://github.com/barry-scott/scm-workbench/blob/master/Source/Git/wb_git_project.py
Look at cmdCommitLogForFile() and its helper __addCommitChangeInformation().
The trick is to diff the tree objects.
answered Sep 30, 2016 at 13:22
Barry Scott
8297 silver badges14 bronze badges
2 Comments
Craig S. Anderson
StackOverflow highly discourages people from putting answers in linked pages. Linked pages often get moved or removed, then the answer is gone.
muuvmuuv
Can you please update your answer. I'm searching for the same and don't want to search this big file when you already have found the solution there. I want to get all files that are committed currently not all commits since the start of the repo.
lang-py