Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jgit递归检查Git工作副本中的更改的最快方法是什么?_Java_Jgit - Fatal编程技术网

Java 使用jgit递归检查Git工作副本中的更改的最快方法是什么?

Java 使用jgit递归检查Git工作副本中的更改的最快方法是什么?,java,jgit,Java,Jgit,我需要检查Git工作副本的一部分是否有更改(递归),包括未跟踪的文件。这就是我目前正在使用的: public Status getStatus(String[] paths) throws NoWorkTreeException, GitAPIException { StatusCommand cmd = git.status(); Arrays.asList(paths).forEach((p) -> { if (!p.isEmpty()) {

我需要检查Git工作副本的一部分是否有更改(递归),包括未跟踪的文件。这就是我目前正在使用的:

public Status getStatus(String[] paths) throws NoWorkTreeException, GitAPIException {
    StatusCommand cmd = git.status();
    Arrays.asList(paths).forEach((p) -> {
        if (!p.isEmpty()) {
            cmd.addPath(p);
        }
    });
    return cmd.call();
}
然后我使用

public isModifed(Status status) {
    return (status.hasUncommittedChanges() ||
        status.getUntracked().isEmpty() ||
        status.getUntrackedFolders().isEmpty());
}

我想知道的是:有没有更快的方法可以做到这一点?

据我所知,这是更高级别的JGITAPI提供的最快/唯一的方法

如果您需要一个溃烂的方法,那么您可以通过缓冲来自早期修改的计算的结果来获得一些速度,因为您的用例是合适的。您必须使用较低级别的JGITAPI,并自行实现大部分
StatusCommand
功能

例如,迭代工作目录的子树并计算其中文件的对象ID(SHA-1哈希)。然后迭代存储库的相同路径并收集对象ID。这两组对象ID都可用于确定文件是否已修改,并且只有在存储库或工作树发生更改时才可以缓冲并使其无效