我一直在开发一个基于Java的产品,Git特性将被集成到该产品中。通过使用Git的一个特性,我将10个文件添加到Git存储库中,然后在一次提交中提交。
上述过程是否可能相反?即查找作为提交的一部分提交的文件列表。
我在< code>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
}
}
我编辑了一点这个链接中给出的代码。你可以尝试使用下面的代码。
public void commitHistory(Git git) throws NoHeadException, GitAPIException, IncorrectObjectTypeException, CorruptObjectException, IOException, UnirestException
{
Iterable<RevCommit> logs = git.log().call();
int k = 0;
for (RevCommit commit : logs) {
String commitID = commit.getName();
if (commitID != null && !commitID.isEmpty())
{
LogCommand logs2 = git.log().all();
Repository repository = logs2.getRepository();
tw = new TreeWalk(repository);
tw.setRecursive(true);
RevCommit commitToCheck = commit;
tw.addTree(commitToCheck.getTree());
for (RevCommit parent : commitToCheck.getParents())
{
tw.addTree(parent.getTree());
}
while (tw.next())
{
int similarParents = 0;
for (int i = 1; i < tw.getTreeCount(); i++)
if (tw.getFileMode(i) == tw.getFileMode(0) && tw.getObjectId(0).equals(tw.getObjectId(i)))
similarParents++;
if (similarParents == 0)
System.out.println("File names: " + fileName);
}
}
}
}
每个提交指向一棵树,该树表示构成提交的所有文件。
请注意,这不仅包括通过此特定提交添加、修改或删除的文件,还包括此修订版中包含的所有文件。
如果提交表示为RevCommit
,则可以这样获取树的ID:
ObjectId treeId = commit.getTree().getId();
如果提交 ID 源自其他源,则需要首先解析它以获取关联的树 ID。例如,请参阅此处:如何使用JGit从SHA1 ID字符串中获取RevCommit或ObjectId?
为了遍历树,请使用Treewalk
:
try (TreeWalk treeWalk = new TreeWalk(repository)) {
treeWalk.reset(treeId);
while (treeWalk.next()) {
String path = treeWalk.getPathString();
// ...
}
}
如果您只对使用某个提交记录的更改感兴趣,请参阅此处:使用JGit创建差异或此处:使用JGit与上次提交的文件差异
问题内容: 我一直在研究将要集成Git功能的基于Java的产品。使用Git的功能之一,我通过分阶段执行将10多个文件添加到Git存储库中,然后在一次提交中提交了这些文件。 以上过程可能相反吗?即查找作为提交的一部分提交的文件列表。 我在命令的帮助下获得了提交,但是我不确定如何获取提交的文件列表。 示例代码: 问题答案: 每个提交都指向一 棵树 ,该 树 表示构成该提交的所有文件。注意,这不仅包括使
我想获取作为提交一部分的所有文件的列表。我有可用的提交ID。 我查看了以下链接 如何使用JGit获取提交的文件列表 并尝试了下面的代码。 和以下代码 使用上面的代码,我得到了分支中存在的所有文件的列表。我需要在提交中删除,修改或添加的文件列表。 使用以下git命令,我成功获得了属于特定提交的文件列表 我想从JGit那里得到同样的东西。 更新:我不想得到两个提交之间的区别,而只是作为提交的一部分更改
问题内容: 在连接到仓库以及添加,提交甚至循环提交文件的消息方面,我已经设法掌握了jGit文件的基础知识。 我接下来要做的是能够获取单个文件的所有提交消息,然后能够将单个文件还原回特定的参考/时间点。 问题答案: 这是基于所有父提交查找提交更改的方法 (标量代码) 请注意,TreeFilter.ANY_DIFF适用于单个树遍历器,并将返回根提交中可用的所有元素。 然后,您将不得不遍历树以查看您的文
有人知道如何使用JGit API获取文件列表吗?我试图在本地存储库中找到类似的函数,比如使用<code>git show 我有一些类似的代码 此代码以本地存储库为目标,使用 遍历上次提交的修订树。我发现这个例子使用来获取文件的引用,但是dunno如何获取所有Java文件的列表。欢迎任何建议。
问题内容: 我想在两次提交之间更改(添加,修改或删除)文件的路径。 在命令行中,我只需编写 用JGit执行此操作的等效方法是什么? 问题答案: 您可以使用来获取的列表。每个条目都有一个changeType,用于指定是添加,删除还是更改文件。一个S’ 和方法返回的路径名。该JavaDoc中列出了每个方法retuns对于给定的变型。 上面的示例列出了与其之间的更改文件,但可以进行更改以比较诸如的任意提
我需要使用JGit获取与特定提交关联的分支的名称。我使用JGit获取存储库的提交SHA的完整列表,现在我需要知道它所属的分支的名称。 如果有人能让我知道我如何做到这一点,我将不胜感激。