2016-11-14 87 views
4

我一直在研究将要集成Git功能的基于Java的产品。使用其中一个Git特性,我通过登台将10多个文件添加到Git存储库中,然后在单次提交中提交它们。如何获得提交的文件列表JGit

上述过程可能与上述过程相反吗? I.e查找作为提交一部分提交的文件列表。

我与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 
} 
} 
+0

请说明'Git功能'是什么。您是指[Eclipse JGit](https://eclipse.org/jgit/),还是指Eclipse IDE Git集成,或者其他的东西? –

+0

是的你是对的赫尔曼。我在谈论JGit。我需要一个函数调用,用于获取作为提交一部分提交的文件列表。 –

+0

然后向我们展示一些代码,到目前为止您尝试过了什么? –

回答

6

,每次提交指向那表示构成提交的所有文件。

注意,这不仅包括犯下添加的,修改或删除与此特定的文件,但包含在这个版本中的所有文件。

为了遍历一棵树,你可以使用JGit的TreeWalk

TreeWalk treeWalk = new TreeWalk(repository); 
treeWalk.reset(commit.getId()); 
while(treeWalk.next()) { 
    String path = treeWalk.getPathString(); 
    // ... 
} 
treeWalk.close(); 

如果你只在记录具有一定提交更改兴趣,在这里看到:Creating Diffs with JGit或在这里:File diff against the last commit with JGit

+1

我得到:org.eclipse.jgit.errors.IncorrectObjectTypeException:对象e5acd3dd99bfc09bf93ba4dd2db4a9ddba4c7359不是一棵树。 –

+0

如果没有被添加/修改或删除,为什么其他文件将处于暂存区域? – NimChimpsky

+0

@NimChimpsky谢谢你的提示。我的回答在这方面不是很清楚。请看我编辑的答案,希望更有意义。 –

-1

你可以尝试使用:

git diff --stat --name-only ${hash} ${hash}~1 

还是看到更大范围的区别:

git diff --stat --name-only ${hash1} ${hash2} 
+0

我一直在使用Eclipse IDE创建我的GIT功能。我需要一个Eclipse JGit方法调用,它可以获取特定提交的文件列表。这样,当用户发送带有提交ID的请求时,我可以显示文件列表。 –

相关问题