使用 jgit 递归检查 Git 工作副本中更改的最快方法是什么?
What is the fastest way to check recursively for changes in a Git working copy with jgit?
我需要检查 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 提供的 fastest/only 方式。
如果您需要更简单的方法,您可以通过缓冲早期修改计算的结果来提高速度 - 因此,假设您的用例是合适的。而且您将不得不使用较低级别的 JGit API 并自己实现 StatusCommand
所做的大部分工作。
例如,迭代工作目录的子树并为其中的文件计算对象 ID(SHA-1 哈希)。然后遍历存储库的相同路径并收集对象 ID。两组对象 ID 均可用于确定文件是否被修改,并且仅当存储库或工作树发生更改时才可以缓冲和失效。
我需要检查 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 提供的 fastest/only 方式。
如果您需要更简单的方法,您可以通过缓冲早期修改计算的结果来提高速度 - 因此,假设您的用例是合适的。而且您将不得不使用较低级别的 JGit API 并自己实现 StatusCommand
所做的大部分工作。
例如,迭代工作目录的子树并为其中的文件计算对象 ID(SHA-1 哈希)。然后遍历存储库的相同路径并收集对象 ID。两组对象 ID 均可用于确定文件是否被修改,并且仅当存储库或工作树发生更改时才可以缓冲和失效。