2016-11-14 83 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的請求時,我可以顯示文件列表。 –

相關問題