2011-12-15 6 views
7

मैं संशोधन XXXXXX और HEAD के बीच बदली/गयी/हटाई गई फ़ाइलों की एक सूची प्राप्त करना चाहता हूं।मैं jgit के साथ "git diff --name-status" के समतुल्य कैसे करूं?

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 
} 

इस सही तरीके से इसके बारे में और यदि ऐसा है तो जाने के लिए कैसे मैं पेड़ों git.diff के लिए आवश्यक मिलता है() है, यह क्या मैं अब तक किया है?

+0

यह एक अच्छा सवाल है, भले ही ओपी ने विशेष रूप से केवल नाम-स्थिति के बारे में पूछा, क्योंकि यह टी लागू होता है o सभी jgit.Git.diff() प्रकार के प्रश्न, जिसके लिए आईएमएचओ उदाहरण दुर्लभ हैं और एपीआई दस्तावेज oblique हैं। तो धन्यवाद! और उत्तर के लिए धन्यवाद @ [केविन साविकी] (http://stackoverflow.com/users/687965/kevin-sawicki) और @ [ktoso] (http://stackoverflow.com/users/111024/ktoso) भी! –

उत्तर

9

आप फोन करके सिर के लिए पेड़ आईडी और हैश प्राप्त कर सकते हैं:

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

और पुनरीक्षण आईडी के लिए:

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

ट्री आईडी है आप पेड़ iterators बना सकते हैं और diffs प्राप्त करें:

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

धन्यवाद! मैं इसे आज रात एक भंवर दे दूंगा। – Erik

+0

पूरी तरह से काम किया। एक बार फिर धन्यवाद! – Erik

+2

मुझे डिफ कॉमांड के लिए चीजों को कार्यान्वित करते समय वास्तव में सहायक पाया गया है - इसलिए मैंने सोचा कि मैं लिंक साझा करूंगा :-) http://git.eclipse.org/c/jgit/jgit.git/tree/ org.eclipse.jgit.test/tst/org/ग्रहण/jgit/API/DiffCommandTest.java –

संबंधित मुद्दे