GitPython "blame" 没有给我所有更改的行

GitPython "blame" does not give me all changed lines

我正在使用 GitPython。下面我打印了特定提交中更改的总行数:f092795fe94ba727f7368b63d8eb1ecd39749fc4:

from git import Repo

repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")

sum_lines = 0
for blame_commit, lines_list in repo.blame('HEAD', 'lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java'):
    if blame_commit.hexsha == 'f092795fe94ba727f7368b63d8eb1ecd39749fc4':
        sum_lines += len(lines_list)
print sum_lines

输出为 38。但是,如果您只是转到 https://github.com/apache/lucene-solr/commit/f092795fe94ba727f7368b63d8eb1ecd39749fc4 并自己查看文件 /lucene/analysis/Analyzer.java 的提交,实际更改的行数不是 38,而是 47。有些行完全丢失了。

为什么我得到了错误的值?

git blame 告诉您哪个提交最后更改了给定文件中的每一行。

您计算的不是该提交中更改的行数,而是该特定提交最后修改的当前 HEAD 文件中的行数。

HEAD 更改为 f092795fe94ba727f7368b63d8eb1ecd39749fc4 应该会得到您期望的结果。

$ git blame f092795fe94ba727f7368b63d8eb1ecd39749fc4 ./lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java | grep f092795 | wc -l
47
$ git blame master ./lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java | grep f092795 | wc -l
38