【问题标题】:List of affected files from git.pull().call()来自 git.pull().call() 的受影响文件列表
【发布时间】:2019-09-28 01:45:12
【问题描述】:

我是 JGit 的新手,所以也许我弄错了,但我无法从 pull 命令中获得结果。 我的意思是受拉取影响的文件列表(修改/添加/删除的文件,....)

我尝试了几件事,但都没有给我所需的信息:

PullResult pull_res = git.pull().setCredentialsProvider(cred).call();
MergeResult merge_res = pull_res.getMergeResult();
FetchResult fetch_res = pull_res.getFetchResult();
java.lang.System.out.println("MergeStat1: "+merge_res.getMergeStatus());
java.lang.System.out.println("####################################");
java.lang.System.out.println("MergeStat2: "+merge_res.getMergedCommits());
java.lang.System.out.println("####################################");
java.lang.System.out.println("FetchRes: "+fetch_res.getMessages());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes1: "+pull_res.getFetchResult());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes2: "+pull_res.getFetchResult().getMessages());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes3: "+pull_res.getFetchResult().toString());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes4: "+pull_res.getFetchResult().getMessages().toString());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes5: "+pull_res.getMergeResult());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes6: "+pull_res.getRebaseResult());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes7: "+pull_res.getFetchedFrom());

这会产生以下输出:

MergeStat1: Fast-forward
####################################
MergeStat2: [Lorg.eclipse.jgit.lib.ObjectId;@1....
####################################
FetchRes: 
####################################
PullRes1: org.eclipse.jgit.transport.FetchResult@3....
####################################
PullRes2: 
####################################
PullRes3: org.eclipse.jgit.transport.FetchResult@3....
####################################
PullRes4: 
####################################
PullRes5: Merge of revisions a...., 1a.. with base 1a... using strategy recursive resulted in: Fast-forward. 
####################################
PullRes6: null
####################################
PullRes7: origin

如何从该拉取中获取所有受影响文件的列表? (以及如何他们受到影响:修改、添加、删除..)

更新

随着 Rüdigers 的回答,我得出了以下问题的解决方案:

CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
ObjectId tree = git.getRepository().resolve("HEAD^{tree}");
newTreeIter.reset(reader, tree);

UsernamePasswordCredentialsProvider cred = new UsernamePasswordCredentialsProvider(USER, PASSWORD);
PullResult pull_res = git.pull().setCredentialsProvider(cred).call();

CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
tree = git.getRepository().resolve("HEAD^{tree}");
oldTreeIter.reset(reader, tree);
DiffFormatter df = new DiffFormatter(new ByteArrayOutputStream());
df.setRepository( git.getRepository() );
List<DiffEntry> entries = df.scan(oldTreeIter, newTreeIter);

for(DiffEntry entry : entries) {
    java.lang.System.out.println(entry);
}

【问题讨论】:

    标签: jgit


    【解决方案1】:

    在调用 pull 之前缓冲当前分支的提交 ID,例如使用git.getRepository().resolve("HEAD")

    拉取完成后,再次读取HEAD 提交ID。现在您应该能够在两个提交之间创建差异。

    如何在两次提交之间显示更改的文件已在此处回答:How to show changes between commits with JGit

    有关 JGit 差异 API 的详细讨论请参见此处:https://www.codeaffine.com/2016/06/16/jgit-diff/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多