JGit:使用FollowFilter进行重命名/复制检测

JGit:使用FollowFilter进行重命名/复制检测,git,jgit,Git,Jgit,因此,我试图做的是检测源代码文件上的重命名/复制活动,因为它已添加到存储库中。我使用以下代码- /** * *@param path用于检索完整历史记录的源代码文件 *@param start为“path”进行的最新提交,以标记为start(也使用HEAD进行测试) *@返回 */ private RevCommitList getList(字符串路径,RevCommit开始)引发异常{ Config Config=new Config(git.getRepository().getConfi

因此,我试图做的是检测源代码文件上的重命名/复制活动,因为它已添加到存储库中。我使用以下代码-

/**
* 
*@param path用于检索完整历史记录的源代码文件
*@param start为“path”进行的最新提交,以标记为start(也使用HEAD进行测试)
*@返回
*/
private RevCommitList getList(字符串路径,RevCommit开始)引发异常{
Config Config=new Config(git.getRepository().getConfig());
config.setString(“diff”,null,“重命名”,“副本”);
config.setInt(“diff”,null,“renameLimit”,Integer.MAX_值);
DiffConfig DiffConfig=config.get(DiffConfig.KEY);
final RevWalk RevWalk=new RevWalk(git.getRepository());
//revWalk.reset();
setTreeFilter(FollowFilter.create(path,diffConfig));
markStart(revWalk.parseCommit(start));
最终RevCommitList=新RevCommitList();
资料来源(revWalk);
list.fillTo(整数.MAX_值);
退货清单;
}
此代码有两个问题-

  • 虽然JGit能够检测到“重命名”,但无法检测到“复制”活动。无论在何处遇到任何复制活动,它都会停止,不会获取进一步的活动。有人能帮我找出代码可能出了什么问题吗

  • 我已经克隆了wildfly()存储库用于测试。我正在使用git的命令行工具检索文件历史记录,并使用上面提到的代码确保在“复制”活动之前,两者都给出相同的结果。但是git的命令行工具和上面提到的代码给出的结果似乎有相当大的差异。例如,当我运行
    git log
    命令时-

    git log --follow --name-status -- build/src/main/resources/modules/org/jboss/as/clustering/common/main/module.xml
    
  • 它给出了以下结果

  • 659621a4ccfa9b45416537aebb14cda0419bb82d
  • b1d3bf705461754307237dd9ca2a2211f3ef4022
  • C1D1A77FD4B956C1A353C02DA972C58F5A3643

  • d218ab3cdd086501d5d4bf585971b9358d303a60

  • 601ecd1a4c8dfc4d2ad63e91b212abf36a049e74
  • 0f15dc8a1330ee24816ac7f64d63afb0cd1ee725
  • F4BB891A9DA0F052235299AD33D43BDF9EC7493
  • 但我的Java代码给出了以下结果-

  • 659621a4ccfa9b45416537aebb14cda0419bb82d
  • b1d3bf705461754307237dd9ca2a2211f3ef4022
  • C1D1A77FD4B956C1A353C02DA972C58F5A3643

  • 67dce2a276a410805b064e962b6950c6d07cf436

  • 60537d19617a81e9505240f1dc5ad0567978fd96
  • 4f1dff9ee4d79487d898c4917ca9bc3d842dc6cf
  • 53cd538018a2bf57998c65202d27d6423a6f02f3
  • 如您所见,从第4次提交开始,所有提交名称都是错误的。你知道有什么可能是错的吗


    (顺便说一句,Java代码为我们从SVN迁移到GIT的存储库提供了正确的结果。)

    通过这个链接,JGit的拷贝检测中似乎有一个bug-