2014-10-01 89 views
2

我想知道如何在提取請求後檢索已更改文件的列表。使用JGit獲取更改後的文件列表

我正在使用它來獲取所有合併的提交,但我想知道所有更改的文件。

Git git = new Git(localRepo); 
PullCommand pullCmd = git.pull(); 
PullResult pullResult = pullCmd.call(); 
MergeResult mergeResult = pullResult.getMergeResult(); 
ObjectId[] mergedCommits = mergeResult.getMergedCommits(); 

for (ObjectId mergedCommit : mergedCommits) { 
    // And now? 
} 

回答

2

建立在以前的評論/問題:

之前你拉獲取當前頭

ObjectId oldHead = repository.resolve("HEAD^{tree}"); 

而且拉後再次:

ObjectId head = repository.resolve("HEAD^{tree}"); 

那麼你應該能夠運行差異同樣的方式在How do I do the equivalent of "git diff --name-status" with jgit?

ObjectReader reader = repository.newObjectReader(); 
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); 
oldTreeIter.reset(reader, oldHead); 
CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); 
newTreeIter.reset(reader, head); 
List<DiffEntry> diffs= git.diff() 
        .setNewTree(newTreeIter) 
        .setOldTree(oldTreeIter) 
        .call(); 
-1


$git diff-tree --no-renames --no-commit-id --name-only -r

我的做法是對我的作品:
1.貓所有散列值到一個文件中(說tempfile1)
2. xargs的-N1 git的差異樹--no -renames --no-commit-id --name-only -r < tempfile1 >> tempfile2
3. sort tempfile2 | uniq的最後>>(刪除重複項)

最終文件將所有修改過的文件

+0

我使用[jgit(http://www.eclipse.org/jgit/),而不是正常的git命令行工具。 – 2014-10-01 14:33:13

+0

在這種情況下,看看是否有幫助:http://stackoverflow.com/questions/8520682/how-do-i-do-the-equivalent-of-git-diff-name-status-with-jgit 解決方案是使用diff-tree,如何在jgit中使用它在上面的鏈接中給出。 – 2014-10-01 14:41:14