Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 克隆存储库时发生JGit错误_Java_Git_Exception_Directory_Jgit - Fatal编程技术网

Java 克隆存储库时发生JGit错误

Java 克隆存储库时发生JGit错误,java,git,exception,directory,jgit,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

无法修复的错误。它嵌入到不同的操作系统如何允许文件名中的字符中。目前无法在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分钟后,相同的存储库没有错误。我猜“将被视为特殊字符”。关于如何管理这一点有什么想法吗?这就解释了问题的根源,但遗憾的是,这并没有让我更接近解决方案。(如果可以的话,我会投赞成票)是一个
'
还是一个
”?根据,
无效,但没有提到
。在其他文件系统(Linux上的ext4)上,两者都是允许的,但这并不意味着在文件名中使用它是一个好主意。至于解决方案,我不知道您的代码是做什么的,但可能不需要签出-对Git存储库数据而不是工作目录执行分析或其他操作。或者签出到不同的文件系统。这是一个单引号。这是我构建的一个存储库挖掘工具。既然问题在JGit内部,我想我应该创建一个关于它的bug报告,并希望它的制作人能想出一个天才的解决方案。我对Java的掌握还不够好,无法尝试自己去纠正它。我是JGit开发人员之一,我认为没有解决方案。看到这种情况下的行为会很有趣,您能试试吗?Git bash:错误:无法创建文件(无效参数)GitHub工具:路径中的非法字符!。