2016-07-15 44 views
7

我在兩個不同的文件夾中有一個存儲庫(folder1folder2)。在倉庫有"oldFile"文件JGit獲取文件

folder1我做以下步驟:

echo 123 > oldFile 
touch newFile 
git add newFile oldFile 
git commit -m "Change the oldFile from folder1 and add the newFile" oldFile newFile 
git push origin master 

後,在folder2我做下面的步驟:

echo zxc > oldFile; 
git add oldFile; 
git commit oldFile -m "Change oldFile from folder2" 

在這種情況下,我想得到一個合併衝突

而我想看到拉文件。我從here得到了這個例子。

ObjectId oldHead = repository.resolve("HEAD^{tree}"); //save old objectId 

PullResult pullResult = pullCommand.setProgressMonitor(new TextProgressMonitor(new OutputStreamWriter(System.out))).call(); 

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

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(); 

pullResult.getMergeResult().getMergeConflicts()我只是文件oldFilediffs集合爲空。

在一個簡單的例子中(當我沒有改變folder2中的「OldFile」)時,diffs集合不是空的 - 它有1個文件「newFile」,而pullResult.getMergeResult().getMergeConflicts()是emtpy(很明顯)。

我該怎麼做?我想得到衝突的文件和成功的拉文件。

+0

沒有了'git的pull'命令告訴你文件有衝突的錯誤一起衝突的名字呢? –

回答

4

我找到了答案。需要在使用的

ObjectId head = git.getRepository().resolve("refs/remotes/origin/HEAD^{tree}");

代替

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