Search code examples
gitjgit

Clone a git repository into an InMemoryRepository with JGit


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?


Solution

  • 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