2011-12-15 25 views
7

Chcę uzyskać listę zmienionych/dodanych/usuniętych plików między wersjami XXXXXX i HEAD. To, co mam tak daleko:Jak zrobić odpowiednik "git diff --name-status" z jgit?

String oldHash = "a97e5553e37a25bd1a3c99eab303145baed08dbd"; 
Git git = Git.open(new File("/tmp/jgit")); 
Repository repository = git.getRepository(); 
ObjectId old = repository.resolve(oldHash); 
ObjectId head = repository.resolve("HEAD"); 

// how do i get the trees from the obj. id? 
List<<DiffEntry> diffs = git.diff().setNewTree(null).setOldTree(null).call(); 

for(DiffEntry diff : diffs) { 
    // do stuff 
} 

Czy to właściwa droga do tego zabrać, a jeśli tak, to w jaki sposób mogę uzyskać drzewa wymagana git.diff()?

+0

To jest świetne pytanie, mimo że PO konkretnie pytał tylko o --name-status, ponieważ dotyczy o wszystkie pytania typu jgit.Git.diff(), dla których przykłady IMHO są skąpe, a dokumentacja interfejsu API skośna. Więc dziękuję! I dziękuję za odpowiedzi @ [Kevin Sawicki] (http://stackoverflow.com/users/687965/kevin-sawicki) i @ [ktoso] (http://stackoverflow.com/users/111024/ktoso) też! –

Odpowiedz

9

można uzyskać identyfikator drzewo głowy i mieszania przez wywołanie:

ObjectId head = repository.resolve("HEAD^{tree}"); 

i id Weryfikacja:

ObjectId old = repository.resolve(oldHash + "^{tree}"); 

Gdy masz identyfikatory drzew można stworzyć iteratory drzewo i uzyskać różnice:

ObjectReader reader = repository.newObjectReader(); 
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); 
oldTreeIter.reset(reader, oldId); 
CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); 
newTreeIter.reset(reader, headId); 
List<DiffEntry> diffs= git.diff() 
         .setNewTree(newTreeIter) 
         .setOldTree(oldTreeIter) 
         .call(); 
+0

Dzięki! Dam mu dzisiaj wir. – Erik

+0

Działa doskonale. Dzięki jeszcze raz! – Erik

+2

Zauważyłem też, że testy dla DiffCommand naprawdę się przydały podczas implementowania różnych rzeczy - więc pomyślałem, że udostępnię link :-) http://git.eclipse.org/c/jgit/jgit.git/tree/ org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java –