I need to clone an existing git repository into an InMemoryRepository
, using JGit, change a file's content and push the changes back to the remote repository.
I couldn't find any examples of cloning a repository into an in-memory repository.
I tried this:
InMemoryRepository.Builder builder = new InMemoryRepository.Builder();
InMemoryRepository inm = builder.build();
Git.cloneRepository().setURI("git@[github_url].git").setDirectory(inm.getDirectory()).call();
Which resulted in an error:
'Destination path ".git" already exists and is not an empty directory'.
I checked the configuration options for InMemoryRepository.Builder
and Repository
classes, but haven't found anything useful.
How can it be done? And after that, is there any problem with changing a file's content and pushing it to github, all from the in-memory repository?
The CloneCommand
will always create a file-based repository. The lines from your post that create an InMemoryRepository
have no effect on the clone command.
I suggest to clone into a temporary location if you only need the repository to make a change and push the result.
For example:
Git.cloneRepository().setURI( ... ).setDirectory( new File("/path/to/empty/dir" ) ).call();
An InMemoryRepository
in JGit still requires a work directory for operations like checkout, etc. Only the object database which is usually found in the .git
directory is stored in memory