2012-08-27 16 views
10

Come faccio a unirmi in JGit?Come unire in JGit?

Diciamo che voglio unire master con il ramo foo, come posso fare questo?

risposta

7

Per unire, è possibile utilizzare il MergeCommand (nella confezione org.eclipse.jgit.api), dopo un CheckoutCommand. Per fornire un esempio, perché in effetti manca Jgit esempi:

Git git = ... // you get it through a CloneCommand, InitCommand 
       // or through the file system 

CheckoutCommand coCmd = git.checkout(); 
// Commands are part of the api module, which include git-like calls 
coCmd.setName("master"); 
coCmd.setCreateBranch(false); // probably not needed, just to make sure 
coCmd.call(); // switch to "master" branch 

MergeCommand mgCmd = git.merge(); 
mgCmd.include("foo"); // "foo" is considered as a Ref to a branch 
MergeResult res = mgCmd.call(); // actually do the merge 

if (res.getMergeStatus().equals(MergeResult.MergeStatus.CONFLICTING)){ 
    System.out.println(res.getConflicts().toString()); 
    // inform the user he has to handle the conflicts 
} 

non ho provato il codice quindi potrebbe non essere perfetto, ma è solo per fornire un inizio. E non ho incluso le importazioni. Sviluppare con JGit implica molti tentativi basati su javadoc

4

Troverete nella JGit repository vari test classes for Merge, tra cui ad esempio la SimpleMergeTest

Merger ourMerger = MergeStrategy.OURS.newMerger(db); 
boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("a"), db.resolve("c") }); 
assertTrue(merge); 
+0

Lo stesso link che hai fornito a Github afferma che l'unione è una caratteristica mancante. Cosa succede con quello? – Tower

+0

@rFactor Potrebbe essere il caso se fornisse solo un wrapper attorno al comando 'git merge' invece di un'implementazione java nativa, ma questo non sembra più il caso. – VonC

+0

sei in grado di confermarlo? Non sono su una macchina di sviluppo quindi non riesco a capire molto a questo punto, o lo controllerò a un certo punto e posterò qui le mie scoperte. – Tower

2

JGit ha un'implementazione Java completa della strategia di fusione di git resolution dal 2010. Se hai bisogno di esempi guarda i casi di test JGit corrispondenti e dai un'occhiata a come EGit è usando MergeCommand, guarda la classe org.eclipse.egit.core.op.MergeOperation.