gpt4 book ai didi

java - 如何使用 JGit 获取提交的文件列表

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:01 25 4
gpt4 key购买 nike

我一直在开发一款基于 Java 的产品,该产品将集成 Git 功能。使用其中一项 Git 功能,我通过暂存然后在一次提交中提交它们,将 10 多个文件添加到 Git 存储库中。

上述过程的逆过程是否可行?即查找作为提交一部分提交的文件列表。

我在 git.log() 命令的帮助下获得了提交,但我不确定如何获取提交的文件列表。

示例代码:

Git git = (...);
Iterable<RevCommit> logs = git.log().call();
for(RevCommit commit : logs) {
String commitID = commit.getName();
if(commitID != null && !commitID.isEmpty()) {
TableItem item = new TableItem(table, SWT.None);
item.setText(commitID);
// Here I want to get the file list for the commit object
}
}

最佳答案

每个提交都指向一棵,它表示构成提交的所有文件。

请注意,这不仅包括在此特定提交中添加、修改或删除的文件,还包括此修订中包含的所有文件。

如果提交表示为 RevCommit,树的 ID 可以这样获取:

ObjectId treeId = commit.getTree().getId();

如果提交 ID 来自其他来源,则需要先对其进行解析以获取关联的树 ID。参见此处,例如:How to obtain the RevCommit or ObjectId from a SHA1 ID string with JGit?

为了遍历树,使用TreeWalk:

try (TreeWalk treeWalk = new TreeWalk(repository)) {
treeWalk.reset(treeId);
while (treeWalk.next()) {
String path = treeWalk.getPathString();
// ...
}
}

如果您只对某个提交记录的更改感兴趣,请参见此处:Creating Diffs with JGit或此处:File diff against the last commit with JGit

关于java - 如何使用 JGit 获取提交的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40590039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com