克隆存储库时出现JGit错误

时间:2013-05-21 12:42:48

标签: java git exception directory jgit

无法修复的错误。它嵌入了不同的操作系统如何允许文件名中的字符。目前无法在JGit或Git中找到解决方案。

当我尝试运行Git.cloneRepository()时,我得到的错误是文件,目录名或卷的语法。这已经开始突然出现而没有任何关于我的软件的代码更改。

JRE:1.7

我使用的代码:

private void cloneCommit() throws Exception {
  try {
    File mineDir = new File(m_target, this.m_name);

    if (!mineDir.exists()) {
      mineDir.mkdir();
      mineDir.setWritable(true);
      mineDir.setExecutable(true);
    }               

    Git g = null;

    WindowCacheConfig cfg = new WindowCacheConfig();
    cfg.setPackedGitMMAP(false);
    WindowCache.reconfigure(cfg);

    g = Git.cloneRepository()
        .setURI(m_localUri)
        .setDirectory(mineDir)
        .call();

    g.reset().setRef(this.m_current.getName()).setMode(ResetType.HARD).call();

    GlobalMessages.commitPulled(this.m_i, this.m_current.getName());

    g.getRepository().close();

    m_runningThreads--;

  } catch (Exception e) {
    errorHandlingMining(e, this.m_current);
  }
}

错误讯息:

org.eclipse.jgit.api.errors.JGitInternalException: Incorrect syntax for file name, directory name or volume label
  at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:130)
  at se.lnu.cs.doris.git.GitRepository$Cloner.cloneCommit(GitRepository.java:423)
  at se.lnu.cs.doris.git.GitRepository$Cloner.guardedCloner(GitRepository.java:446)
  at se.lnu.cs.doris.git.GitRepository$Cloner.run(GitRepository.java:440)
  at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Incorrect syntax for file name, directory name or volume label
  at java.io.WinNTFileSystem.createFileExclusively(Native Method)
  at java.io.File.createTempFile(Unknown Source)
  at org.eclipse.jgit.dircache.DirCacheCheckout.checkoutEntry(DirCacheCheckout.java:968)
  at org.eclipse.jgit.dircache.DirCacheCheckout.doCheckout(DirCacheCheckout.java:457)
  at org.eclipse.jgit.dircache.DirCacheCheckout.checkout(DirCacheCheckout.java:391)
  at org.eclipse.jgit.api.CloneCommand.checkout(CloneCommand.java:229)
  at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:127)
  ... 4 more

我不明白问题是什么。我试图通过跳过第一个if子句来解决它,只需使用mineDir.createNewFile()等。几天前代码工作得非常好。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

从堆栈跟踪中,错误发生在克隆存储库后的结帐阶段。在此阶段,HEAD提交中记录的文件和文件夹将在工作目录中创建。

那么,是不是有一个提交引入了名称中带有特殊字符的文件?要查找,请查看克隆存储库的历史记录。