我需要检查(递归地)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());
}
我想知道的是:有没有更快的方法?
据我所知,这是高级JGit API提供的最快/唯一方法。
如果您需要溃烂之路,则可以通过缓冲较早的修改后的计算结果来提高速度-鉴于您的用例合适。而且,您将不得不使用较低级别的JGit API并StatusCommand
自己实现大部分功能。
例如,迭代工作目录的子树并为其中的文件计算对象ID(SHA-1哈希)。然后遍历存储库的相同路径并收集对象ID。两组对象ID都可用于确定文件是否被修改,并且只有在存储库或工作树发生更改时才可以对其进行缓冲和无效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句