2011-12-15 26 views
7

Tôi muốn nhận danh sách các tệp đã thay đổi/thêm/xóa giữa phiên bản XXXXXX và HEAD. Đây là những gì tôi có cho đến thời điểm này:Làm cách nào để làm tương đương với "git diff --name-status" với 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 
} 

Đây có phải là cách đúng đắn để thực hiện và nếu có, làm cách nào để có được các cây cần thiết cho git.diff()?

+0

Đây là một câu hỏi tuyệt vời mặc dù OP chỉ được hỏi cụ thể về - tên-trạng thái, vì nó áp dụng o tất cả các câu hỏi kiểu jgit.Git.diff(), ví dụ IMHO khan hiếm và tài liệu API xiên. Cảm ơn! Và cảm ơn cho câu trả lời @ [Kevin Sawicki] (http://stackoverflow.com/users/687965/kevin-sawicki) và @ [ktoso] (http://stackoverflow.com/users/111024/ktoso) quá! –

Trả lời

9

Bạn có thể lấy id cây cho TRỤ và băm bằng cách gọi:

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

và cho id sửa đổi:

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

Một khi bạn có id cây bạn có thể tạo ra các vòng lặp cây và nhận được sự khác biệt:

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

Cảm ơn! Tối nay tôi sẽ cho nó một chút. – Erik

+0

Đã hoạt động hoàn hảo. Cảm ơn một lần nữa! – Erik

+2

Tôi cũng đã tìm thấy các bài kiểm tra cho DiffCommand thực sự hữu ích trong khi thực hiện những thứ xung quanh khác biệt - vì vậy tôi nghĩ rằng tôi sẽ chia sẻ liên kết :-) http://git.eclipse.org/c/jgit/jgit.git/tree/ org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java –

Các vấn đề liên quan