Клон Git хранилища в памяти

Я пытался клонировать крошечный репозиторий конфигурации git в память, используя JGIT и JIMFS, используя что-то вроде

FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path gitPath = Files.createDirectories(fs.getPath("/git")); 
Git.cloneRepository().setURI(...).setBranch(...).setDirectory(gitPath.toFile())
                    .setCredentialsProvider(...).call()

Но поскольку JIMFS работает с API-интерфейсом Path Path (поскольку он не использует файловую систему по умолчанию), а JGIT использует API-интерфейс File, JIMFS не реализует вызов toFile():

@Override
public File toFile() {
    // documented as unsupported for anything but the default file system
    throw new UnsupportedOperationException();
}

Итак, я понимаю это UnsupportedOperationException, Есть ли простой способ заставить эту (или подобную) установку работать без обращения к временному каталогу на диске?

1 ответ

Решение

JGit предлагает InMemoryRepository для тестирования и экспериментального использования. Но даже этот бэкэнд хранилища будет хранить рабочий каталог не пустых хранилищ на диске.

Если JGit не изменит его FileRepository Реализация использовать API-интерфейсы Paths, я не вижу способа использовать Jimfs для хранения репозиториев.

Некоторые команды позволяют указать WorkingTreeIterator, что в теории, позволило бы доступ для чтения к рабочему дереву в альтернативном хранилище. Однако не все команды поддерживают эту концепцию. Доступ для записи также в настоящее время отсутствует.

Yo может клонировать репозиторий в память и копировать его файл за файлом в собственный файл fs. Смотрите пример чтения файлов во внутреннюю память репозитория здесь: /questions/7896398/klonirovat-repozitorij-git-v-repozitorij-inmemory-s-pomoschyu-jgit/7896409#7896409

Другие вопросы по тегам