2012-08-27 16 views

Odpowiedz

7

Aby scalić, można użyć (w opakowaniu org.eclipse.jgit.api) MergeCommand po CheckoutCommand. Aby zapewnić Ci przykład, bo rzeczywiście Jgit brakuje przykładów:

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 
} 

nie próbowałem kodu, więc nie może być doskonały, ale to tylko, aby zapewnić start. I nie uwzględniłem przywozu. Rozwijających się JGit implikuje wiele prób opartych na javadoc

4

Znajdziecie w JGit repository różnych test classes for Merge, w tym na przykład SimpleMergeTest

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

To samo łącze, które dałeś Githubowi, że łączenie jest brakującą cechą. Co z tym? – Tower

+0

@rFactor Mogło by tak być, gdyby zawierał tylko otoki wokół polecenia 'git merge' zamiast w pełni natywnej implementacji java, ale wydaje się, że już tak nie jest. – VonC

+0

Czy jesteś w stanie to potwierdzić? Nie pracuję na maszynie programistycznej, więc nie mogę się zbytnio zorientować w tym punkcie, albo sprawdzę ją w pewnym momencie i opublikuję tutaj moje wyniki. – Tower

2

JGit jest pełnowartościowy wykonania Java GIT resolve strategii seryjnej od roku 2010. Jeśli trzeba spojrzeć na przykłady odpowiednich testów JGit i patrzeć jak Egit jest używając MergeCommand, spójrz na klasę org.eclipse.egit.core.op.MergeOperation.