2013-05-21 2 views
0

수정되지 않는 버그. 다른 운영 체제가 파일 이름에 문자를 허용하는 방법에 포함됩니다. 현재 JGit 또는 Git에서 해결책을 찾을 수 없습니다.리포지토리 복제시 JGit 오류가 발생합니다.

Git.cloneRepository()를 실행하려고하면 파일, 디렉토리 이름 또는 볼륨 lable에 대한 구문 오류가 발생합니다. 이것은 내 소프트웨어의이 부분에 관한 코드의 변경없이 갑자기 나타났습니다.

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() 등을 사용하여이를 바로 잡으려고 노력했다.이 코드는 불과 며칠 전에 훌륭하게 작동했다. 어떤 제안?

+0

오류가 발생하면 임의로 보입니다. 질문이 게시 된 후 30 분이 지나도 동일한 저장소에 오류가 표시되지 않습니다. –

답변

1

스택 추적에서 저장소가 복제 된 후 체크 아웃 단계에서 오류가 발생합니다. 이 단계에서는 HEAD 커밋에 기록 된 파일과 폴더가 작업 디렉토리에 만들어집니다.

그래서 이름에 특수 문자가있는 파일을 도입 한 커밋이 있었습니까? 알아 내려면 복제 된 저장소의 기록을보십시오.

+0

나는 '특수 문자로 간주 할 것 같아요. 이것이 어떻게 관리 될 수 있는지에 대한 아이디어가 있습니까? 이것은 문제의 근본 원인을 설명하지만, 슬프게도 해결책에 훨씬 가까워지지 않습니다. (그리고 내가 할 수있는 한 upvote) –

+0

이 문서는 "이 문서"(http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247)에 따르면'''또는'''입니까? % 28v = vs.85 % 29.aspx # naming_conventions),'''은 유효하지 않지만'''에 대한 언급이 없습니다. 다른 파일 시스템 (Linux에서는 ext4)에서 둘 다 허용되지만, 이것이 파일 이름에 사용하는 것이 좋습니다. 솔루션에 관해서는, 당신의 코드가 무엇인지 모르지만 체크 아웃이 필요하지 않을 수도 있습니다 - 작업 디렉토리 대신 Git 저장소 데이터를 분석하거나 수행하십시오. 또는 다른 파일 시스템으로 체크 아웃하십시오. – robinst

+0

작은 따옴표입니다. 제가 작성한 저장소 마이닝 도구입니다. 그리고이 문제는 JGit에 있기 때문에 버그 리포트를 작성하고 생성자가 천재 솔루션을 생각할 수 있기를 바랍니다. 나는 그것을 스스로 해결하려고 자바가 충분히 가까이 있지 않다. –