如何在 Jgit 中获取文件列表作为提交的一部分
How to get the list of files as a part of commit in Jgit
我想获取属于提交一部分的所有文件的列表。我有可用的提交 ID。
我查看了以下内容 link
并尝试了以下代码。
TreeWalk treeWalk = new TreeWalk( repository );
treeWalk.reset( commit.getId() );
while( treeWalk.next() ) {
String path = treeWalk.getPathString();
// ...
}
treeWalk.close();
和以下代码
try( RevWalk walk = new RevWalk( git.getRepository() ) ) {
RevCommit commit = walk.parseCommit( commitId );
ObjectId treeId = commit.getTree().getId();
try( ObjectReader reader = git.getRepository().newObjectReader() ) {
return new CanonicalTreeParser( null, reader, tree );
}
}
通过上面的代码,我得到了分支中存在的所有文件的列表。
我需要在提交时删除、修改或添加的文件列表。
通过以下 git 命令,我成功获取了属于特定提交的文件列表
git diff-tree --name-only -r <commitId>
我想从 JGit 得到同样的东西。
更新:
我不想了解两次提交之间的区别,而只是作为提交的一部分更改的文件列表。
您可以使用 Git.diff() 命令。它需要两个树迭代器:
final List<DiffEntry> diffs = git.diff()
.setOldTree(prepareTreeParser(repository, oldCommit))
.setNewTree(prepareTreeParser(repository, newCommit))
.call();
可以使用以下命令从 commitId 创建树迭代器:
try (RevWalk walk = new RevWalk(repository)) {
RevCommit commit = walk.parseCommit(repository.resolve(objectId));
RevTree tree = walk.parseTree(commit.getTree().getId());
CanonicalTreeParser treeParser = new CanonicalTreeParser();
try (ObjectReader reader = repository.newObjectReader()) {
treeParser.reset(reader, tree.getId());
}
walk.dispose();
return treeParser;
}
然后您可以遍历生成的列表并检索每个 changed/added/removed 文件的详细信息。
另请参阅 this sample in my jgit-cookbook 以了解可运行的展示。
我想获取属于提交一部分的所有文件的列表。我有可用的提交 ID。
我查看了以下内容 link
并尝试了以下代码。
TreeWalk treeWalk = new TreeWalk( repository );
treeWalk.reset( commit.getId() );
while( treeWalk.next() ) {
String path = treeWalk.getPathString();
// ...
}
treeWalk.close();
和以下代码
try( RevWalk walk = new RevWalk( git.getRepository() ) ) {
RevCommit commit = walk.parseCommit( commitId );
ObjectId treeId = commit.getTree().getId();
try( ObjectReader reader = git.getRepository().newObjectReader() ) {
return new CanonicalTreeParser( null, reader, tree );
}
}
通过上面的代码,我得到了分支中存在的所有文件的列表。 我需要在提交时删除、修改或添加的文件列表。
通过以下 git 命令,我成功获取了属于特定提交的文件列表
git diff-tree --name-only -r <commitId>
我想从 JGit 得到同样的东西。
更新: 我不想了解两次提交之间的区别,而只是作为提交的一部分更改的文件列表。
您可以使用 Git.diff() 命令。它需要两个树迭代器:
final List<DiffEntry> diffs = git.diff()
.setOldTree(prepareTreeParser(repository, oldCommit))
.setNewTree(prepareTreeParser(repository, newCommit))
.call();
可以使用以下命令从 commitId 创建树迭代器:
try (RevWalk walk = new RevWalk(repository)) {
RevCommit commit = walk.parseCommit(repository.resolve(objectId));
RevTree tree = walk.parseTree(commit.getTree().getId());
CanonicalTreeParser treeParser = new CanonicalTreeParser();
try (ObjectReader reader = repository.newObjectReader()) {
treeParser.reset(reader, tree.getId());
}
walk.dispose();
return treeParser;
}
然后您可以遍历生成的列表并检索每个 changed/added/removed 文件的详细信息。
另请参阅 this sample in my jgit-cookbook 以了解可运行的展示。