2016-07-15 63 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}");