JGit 获取拉取文件
JGit get pulled files
我在两个不同的文件夹(folder1
和 folder2
)中有一个存储库。在存储库中有一个 "oldFile"
文件
在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()
中我只有文件 oldFile
而 diffs
集合是空的。
在一个简单的情况下(当我不从 folder2
更改 "OldFile" 时)差异集合不为空 - 它有 1 个文件 "newFile" 和 pullResult.getMergeResult().getMergeConflicts()
是空的(很明显)。
我做错了什么?我想获取冲突的文件和成功拉取的文件。
我找到了答案。需要使用
ObjectId head = git.getRepository().resolve("refs/remotes/origin/HEAD^{tree}");
而不是
ObjectId head = repository.resolve("HEAD^{tree}");
我在两个不同的文件夹(folder1
和 folder2
)中有一个存储库。在存储库中有一个 "oldFile"
文件
在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()
中我只有文件 oldFile
而 diffs
集合是空的。
在一个简单的情况下(当我不从 folder2
更改 "OldFile" 时)差异集合不为空 - 它有 1 个文件 "newFile" 和 pullResult.getMergeResult().getMergeConflicts()
是空的(很明显)。
我做错了什么?我想获取冲突的文件和成功拉取的文件。
我找到了答案。需要使用
ObjectId head = git.getRepository().resolve("refs/remotes/origin/HEAD^{tree}");
而不是
ObjectId head = repository.resolve("HEAD^{tree}");