【问题标题】:JGit error when cloning repository克隆存储库时出现 JGit 错误
【发布时间】:2013-05-21 12:42:47
【问题描述】:

无法修复的错误。它嵌入到不同的操作系统如何允许文件名中的字符。目前在 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() 等。代码在几天前工作得很好。有什么建议吗?

【问题讨论】:

  • 出现错误时似乎很随意。发布问题 30 分钟后,相同的存储库没有错误。

标签: java git exception directory jgit


【解决方案1】:

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

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

【讨论】:

  • 我猜 ' 会算作一个特殊字符。关于如何管理的任何想法?这解释了问题的根源,但遗憾的是并没有让我更接近解决方案。 (如果可以的话,我会投票)
  • ' 还是"?根据this documentation" 无效,但没有提及'。在其他文件系统(Linux 上的 ext4)上,两者都是允许的,但这并不意味着在文件名中使用它是一个好主意。至于解决方案,我不知道您的代码做了什么,但也许不需要签出——在 Git 存储库数据而不是工作目录上执行分析或其他任何操作。或者签出到不同的文件系统。
  • 是单引号。这是我构建的存储库挖掘工具。由于问题出在 JGit 中,我认为我应该创建一个错误报告,并希望它的生产者能想到一个天才的解决方案。我对 Java 还不够好,无法自己尝试纠正它。
  • 我是 JGit 开发人员之一,我认为没有解决方案。看看Git for Windows 在这种情况下的表现会很有趣,你能试试吗?
  • Git bash:错误:无法创建文件 (无效参数)GitHub 工具:路径中有非法字符!。跨度>
猜你喜欢
  • 2011-06-25
  • 2019-02-01
  • 1970-01-01
  • 2012-01-14
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多