当前位置: 首页 > 面试题库 >

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

毕霖
2023-03-14
问题内容

我一直在研究将要集成Git功能的基于Java的产品。使用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
}
}

问题答案:

每个提交都指向一 棵树 ,该 表示构成该提交的所有文件。注意,这不仅包括使用此特定提交添加,修改或删除的文件,还包括此修订版中包含的所有文件。

如果将提交表示为a RevCommit,则可以通过以下方式获取树的ID:

ObjectId treeId = commit.getTree();

如果提交ID来自另一个来源,则需要首先对其进行解析以获取关联的树ID。例如,请参见此处:如何使用JGit从SHA1ID字符串获取RevCommit或ObjectId?

为了遍历树,请使用TreeWalk

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

如果您只对通过特定提交记录的更改感兴趣,请参见此处:使用JGit创建差异



 类似资料:
  • 我一直在开发一个基于Java的产品,Git特性将被集成到该产品中。通过使用Git的一个特性,我将10个文件添加到Git存储库中,然后在一次提交中提交。 上述过程是否可能相反?即查找作为提交的一部分提交的文件列表。 我在< code>git.log()命令的帮助下获得了提交,但是我不确定如何获得提交的文件列表。 示例代码:

  • 我想获取作为提交一部分的所有文件的列表。我有可用的提交ID。 我查看了以下链接 如何使用JGit获取提交的文件列表 并尝试了下面的代码。 和以下代码 使用上面的代码,我得到了分支中存在的所有文件的列表。我需要在提交中删除,修改或添加的文件列表。 使用以下git命令,我成功获得了属于特定提交的文件列表 我想从JGit那里得到同样的东西。 更新:我不想得到两个提交之间的区别,而只是作为提交的一部分更改

  • 问题内容: 在连接到仓库以及添加,提交甚至循环提交文件的消息方面,我已经设法掌握了jGit文件的基础知识。 我接下来要做的是能够获取单个文件的所有提交消息,然后能够将单个文件还原回特定的参考/时间点。 问题答案: 这是基于所有父提交查找提交更改的方法 (标量代码) 请注意,TreeFilter.ANY_DIFF适用于单个树遍历器,并将返回根提交中可用的所有元素。 然后,您将不得不遍历树以查看您的文

  • 有人知道如何使用JGit API获取文件列表吗?我试图在本地存储库中找到类似的函数,比如使用<code>git show 我有一些类似的代码 此代码以本地存储库为目标,使用 遍历上次提交的修订树。我发现这个例子使用来获取文件的引用,但是dunno如何获取所有Java文件的列表。欢迎任何建议。

  • 问题内容: 我想在两次提交之间更改(添加,修改或删除)文件的路径。 在命令行中,我只需编写 用JGit执行此操作的等效方法是什么? 问题答案: 您可以使用来获取的列表。每个条目都有一个changeType,用于指定是添加,删除还是更改文件。一个S’ 和方法返回的路径名。该JavaDoc中列出了每个方法retuns对于给定的变型。 上面的示例列出了与其之间的更改文件,但可以进行更改以比较诸如的任意提

  • 我需要使用JGit获取与特定提交关联的分支的名称。我使用JGit获取存储库的提交SHA的完整列表,现在我需要知道它所属的分支的名称。 如果有人能让我知道我如何做到这一点,我将不胜感激。