使用 GitPython 反向读取提交
Reading commits in reverse using GitPython
有没有一种方法可以使用 GitPython 库反向迭代提交,即从最旧的提交到最新的提交,方式类似于:
>>> from git import Repo
>>> repo = Repo('/path/to/repo')
>>> for commit in reversed(repo.iter_commits()):
... print commit
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument to reversed() must be a sequence
不必先将所有内容都包含在内存中,因为我的情况是处理大量提交(例如 linux 内核)?
查看 documentation it appears that iter_commits
is passing its kwargs to git-rev-list
. Looking at its documentation 表明它接受 --reverse
标志,因此只能猜测 repo.iter_commits(reverse=True)
会起作用。
这里的主要问题是反过来你需要传递序列。但是 iter_commits return 一个迭代器。
所以你可以做
commitList = list(repo.iter_commits())
然后在 commitList
上使用反向逻辑
有没有一种方法可以使用 GitPython 库反向迭代提交,即从最旧的提交到最新的提交,方式类似于:
>>> from git import Repo
>>> repo = Repo('/path/to/repo')
>>> for commit in reversed(repo.iter_commits()):
... print commit
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument to reversed() must be a sequence
不必先将所有内容都包含在内存中,因为我的情况是处理大量提交(例如 linux 内核)?
查看 documentation it appears that iter_commits
is passing its kwargs to git-rev-list
. Looking at its documentation 表明它接受 --reverse
标志,因此只能猜测 repo.iter_commits(reverse=True)
会起作用。
这里的主要问题是反过来你需要传递序列。但是 iter_commits return 一个迭代器。
所以你可以做
commitList = list(repo.iter_commits())
然后在 commitList
上使用反向逻辑