如果要添加的文件不存在,addFilePattern 不会抛出 FileNotFoundException

addFilePattern does not throw FileNotFoundException if file to be added is not present

我编写了一个 java 程序来推送到 git 存储库,我在其中一次推送特定文件而不是推送所有文件。

try {
  git.add().addFilePattern("files\file1.txt").call();
} catch (Exception e) {
  e.printStackTrace();
}

但是如果 file1.txt 不存在,则不会进入 catch 块。 如果我用 CLI Git 做同样的事情,它会给出异常

fatal: pathspec 'D:\mygit\files\file1.txt' did not match any files

我想使用 JGit 在 Java 中捕捉这个异常。

JGit 版本 4.6.0,Java1.8,Windows10

JGit 不会将传递不存在的路径视为错误addFilepatern()。因此,原因可能是该方法还接受文件名模式。这样的模式可能匹配也可能不匹配文件。

您必须自己检查文件是否存在。使用 Java 文件 API,例如

boolean fileExists = new File( repository.getWorkTree(), "file.txt" ).isFile();

或者通过从AddCommand::call()返回的DirCache,例如

DirCache dirCache = git.add().addFilePattern( "file.txt" ).call();
boolean fileExists = dircache.findEntry( "file.txt" ) >= 0;