所以我要做的是检测源代码文件上的重命名/复制活动,因为它已添加到存储库中。我正在使用以下代码 -
/**
*
* @param path source code file to retrieve complete history
* @param start latest commit made for "path" to mark as start (tested with HEAD also)
* @return
*/
private RevCommitList<RevCommit> getList(String path, RevCommit start) throws Exception {
Config config = new Config(git.getRepository().getConfig());
config.setString("diff", null, "renames", "copies");
config.setInt("diff", null, "renameLimit", Integer.MAX_VALUE);
DiffConfig diffConfig = config.get(DiffConfig.KEY);
final RevWalk revWalk = new RevWalk(git.getRepository());
//revWalk.reset();
revWalk.setTreeFilter(FollowFilter.create(path, diffConfig));
revWalk.markStart(revWalk.parseCommit(start));
final RevCommitList<RevCommit> list = new RevCommitList<RevCommit>();
list.source(revWalk);
list.fillTo(Integer.MAX_VALUE);
return list;
}
此代码存在2个问题 -
虽然JGit能够检测到“RENAMES”,但它无法检测到“COPY”活动。无论遇到任何Copy活动,它都会停止并且不会获取更多活动。有人可以帮助确定代码可能出错的地方吗?
我已经克隆了wildfly(https://www.github.com/wildfly)存储库以供我测试。我正在使用git的命令行工具检索文件历史记录,并使用上面提到的代码确保两者至少在“复制”活动之前给出相同的结果。但是git的命令行工具和上面提到的代码给出的结果似乎有很大不同。例如。当我运行git log
命令 -
git log --follow --name-status -- build/src/main/resources/modules/org/jboss/as/clustering/common/main/module.xml
它给出了以下结果
c1d1a77fd4beb956c1a353c02da972c58f5a3643
d218ab3cdd086501d5d4bf585971b9358d303a60
...
但是我的Java代码给出了以下结果 -
c1d1a77fd4beb956c1a353c02da972c58f5a3643
67dce2a276a410805b064e962b6950c6d07cf436
从第4次提交开始,您可以看到所有提交名称都是错误的。知道什么可能是错的吗?
(顺便说一下,Java代码为我们从SVN迁移到GIT的存储库提供了正确的结果。)
答案 0 :(得分:0)
通过此链接,看起来JGit的副本检测中存在错误 - https://groups.google.com/forum/#!topic/repo-discuss/g96GClhlsh4。