2014-10-17 13 views
5

Şu andanumaralı telefonu görüntülüyorsam, şu anda 3.5.1.201410131835-r sürümünde ve git-merge-base eşdeğerini bulamıyorum.JGit'te birleştirme tabanı nasıl yapılır?

Bir şubenin git: check if pull needed numaralı belgede gösterildiği gibi güncel olup olmadığını, arkasında, ileride mi yoksa farklı mı olduğunu belirlemek istiyorum.

JGit'te birleştirme için mümkün olduğunca iyi ataları bulmak için en özlü yol nedir?

cevap

8

Bunun için RevFilter.MERGE_BASE kullanabilirsiniz:

RevWalk walk = new RevWalk(repository); 
walk.setRevFilter(RevFilter.MERGE_BASE); 
walk.markStart(commit1); 
walk.markStart(commit2); 
RevCommit mergeBase = walk.next(); 

Ayrıca ilgilendiğiniz tüm uzaktan izleme şube kıyasla şube sayısı arkasında/önde olması durumunda BranchTrackingStatus olduğunu unutmayın.

+0

teşekkür ederiz deneyin al! –

+0

"--fork-point" eklemeye eşdeğer bir değer var çünkü "git merge-base --fork-point" ile aynı sonuçları alamıyorum. –

+0

@PeterKahn: Bu işe yarar mı ?: https://gist.github.com/robinst/997da20d09a82d85a3e9 (Eminim ki daha verimli bir şekilde yapılabilir, bu yüzden dikkatli kullanın) – robinst

1

İşte JGit kullanarak BranchTrackingStatus ile geçerli:

public enum TrackingStatus { 
    SAME, BEHIND, AHEAD, DIVERGED 
} 

public TrackingStatus getTrackingStatus() throws IOException, GitAPIException { 
    Repository userRepo = new FileRepository(<path_to_.git_file>); 
    Git git = new Git(userRepo); 
    git.fetch().call(); 
    BranchTrackingStatus bts = BranchTrackingStatus.of(git.getRepository(), 
                 git.getRepository().getBranch()); 
    int aheadCount = bts.getAheadCount(); 
    int behindCount = bts.getBehindCount(); 
    if (aheadCount == 0 && behindCount == 0) { 
     return TrackingStatus.SAME; 
    } else if (aheadCount > 0 && behindCount == 0) { 
     return TrackingStatus.AHEAD; 
    } else if (aheadCount == 0 && behindCount > 0) { 
     return TrackingStatus.BEHIND; 
    } else { 
     return TrackingStatus.DIVERGED; 
    } 
} 
0

jgit bu vardır:

RevCommit org.eclipse.jgit.merge.Merger.getBaseCommit(RevCommit a, RevCommit b) throws IncorrectObjectTypeException, IOException 

bu mükemmel,

İlgili konular