2015-04-24 16 views
6

Voglio creare un programma Java, cheCome si fa a git pull con un database in memoria in JGit?

  1. si collega ad un certo repository Git,
  2. accoda testo in un file,
  3. i depositi e le
  4. spinge le modifiche a tale repository.

Idealmente, tutto questo dovrebbe accadere nella memoria.

sto usando JGit per l'interazione con Git:

InMemoryRepository repo = new InMemoryRepository(new DfsRepositoryDescription()); 
Git git = new Git(repo); 
git.init().call(); 
PullCommand pull = git.pull(); 

StoredConfig config = git.getRepository().getConfig(); 
config.setString("remote", "origin", "url", "https://XXX"); 
config.save(); 

PullResult result = pull.call(); 

I pull.call() risultati nella seguente eccezione:

org.eclipse.jgit.api.errors.NoHeadException: Pull on repository without HEAD currently not supported 
    at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:191) 

Come posso recuperare il contenuto di un repository in un in-memory Repository JGit?

+0

è necessario emettere un 'fetch' probabilmente –

+0

Non sono un professionista in questo settore ma non ho mai sentito nessuno che abbia tentato l'accesso git in memoria - Ho un suggerimento, però .. Prova a caricare il repository in un temp directory (utilizzare la funzione File.deleteOnExit durante la creazione della directory tramite File.mkdirs) e quindi caricare tutti quei file nella memoria, salvando le modifiche apportate e risincronizzando il git con la directory temp. – Wayne

+0

'no HEAD' probabilmente significa è necessario effettuare prima il checkout di qualche ramo ('checkout master' o qualunque altro ramo) – LeGEC

risposta

3

di aggiungere un file si avrebbe bisogno di un repository non-nudo (uno che ha una directory di lavoro. This mailing list post stati, che

I comandi di porcellana presuppongono una base file, in alcuni casi, in particolare quando si tratta di l'albero di lavoro. È possibile eseguire inserti in un repository in memoria se si fa il lavoro da soli, ma i comandi di porcellana non funzionano in questo modo.

Mentre si potrebbe do without the procelain commands, ho anche raccomandare (come @Wayne commentato sopra) per clonare in un repository temporaneo, aggiungere al file , premere e quindi eliminare il repository.

Problemi correlati