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-clause, просто используя myDir.createNewFile() и т. Д. Код работал великолепно всего несколько дней назад. Какие-либо предложения?

+0

Кажется произвольным, когда возникает ошибка. В том же хранилище нет ошибки через 30 минут после публикации вопроса. –

ответ

1

Из трассировки стека ошибка происходит на этапе проверки после клонирования хранилища. На этом этапе файлы и папки, записанные в фиксации HEAD, создаются в рабочем каталоге.

Итак, может быть, что было коммит, который ввел имя файла со специальными символами? Чтобы узнать, посмотрите историю клонированного репозитория.

+0

Я предполагаю, что «будет считаться особым персонажем. Любые идеи о том, как это можно управлять? Это объясняет корень проблемы, но, к сожалению, меня не намного ближе к решению. (И я бы поднял, если бы мог) –

+0

Является ли это '' 'или' ''? Согласно [этой документации] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247 % 28v = vs.85% 29.aspx # naming_conventions), '' 'недействительно, но не упоминается' ''. В других файловых системах (ext4 в Linux) разрешены оба варианта, но это не значит, что рекомендуется использовать его в имени файла. Что касается решения, я не знаю, что делает ваш код, но, возможно, проверка не нужна - выполните анализ или что-то в данных репозитория Git вместо рабочего каталога. Или выезд в другую файловую систему. – robinst

+0

Это единственная цитата. Это инструмент для создания хранилища, который я создал. И поскольку проблема в JGit, я предполагаю, что я должен просто создать отчет об ошибке и надеяться, что производители этого могут подумать о гениальном решении. Я не достаточно хорошо разбираюсь в Java, пытаясь исправить это сам. –

Смежные вопросы