Клон 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