2017-01-12 2 views
0

주어진 DiffEntry이 온 나무 (이전 또는 신규)를 신속하고 쉬운 방법으로 판단 할 수없는 것 같습니다. 제 경우에는 결함/작업 트리의 "나가는"(말하자면) 변경에만 관심이 있습니다 ... 다른/마스터 브랜치의 새로운 "들어오는"변경 사항은 아무런 관심이 없습니다.JGit의 DiffCommand를 사용하여 변경 사항이 발생한 지점을 확인하는 방법은 무엇입니까?

IOW, 파일의 경로 이름, 버전 및 변경 유형 만 필요합니다. 다른/master 분기에 아직없는을 변경했습니다. 필연적으로 필요하거나 원하지 않습니다. 파일 내용 변경 사항을 구문 분석하십시오. 마스터 브랜치 변경 사항은 결국에는 관심의 대상이 될 것이지만, 그들은 내가 가진 프로그래밍 방식 유스 케이스를 혼란스럽게합니다.

코드는 :

AbstractTreeIterator oldTreeParser = prepareTreeParser(repository, oldBranchName); 
AbstractTreeIterator newTreeParser = prepareTreeParser(repository, newBranchName); 
gitInstance = new Git(repository); 
List<DiffEntry> diff = gitInstance.diff().setOldTree(oldTreeParser).setNewTree(newTreeParser).setShowNameAndStatusOnly(true).call(); 
for (DiffEntry entry : diff) 
{ 
    // is entry from oldTree or newTree or both? 
} 

답변

0

당신은 파일을 추가, 변경 또는 삭제 여부를 결정하기 위해 DiffEntry::getChangeType() 방법을 사용할 수 있습니다. 예를 들어

:

switch(diffEntry.getChangeType()) { 
    case ADD: 
    // file does not exist in oldBranch, file is new in newBranch 
    break; 
    case DELETE: 
    // file did exist in oldBranch, file was deleted in newBranch 
    break; 
    case MODIFY: 
    // file exists in oldBranch and newBranch, content was changed 
    break; 
    case COPY: 
    case RENAME: 
    // file was copied or moved to a new location 
    break; 
} 

이 당신이 찾고 있던 무엇인가?

+0

필자는 getChangeType()이 MODIFY가 파일을 수정 한 분기를 결정하기에 충분하다고 생각하지 않습니다. ADD와 DELETE의 경우, 원래 분기에 A 부분이 없었으므로 오해의 소지가 있습니다. 그러면 팀의 다른 누군가가 A 부분을 마스터 분기에 추가합니다. 마스터와 함께 작업 분기를 비교할 때 내 지부가 부분 A를 삭제했다고 생각합니다. "삭제"작업이 사실 일뿐만 아니라 실제로 해당 사례를 사례와 구분할 수있는 방법이없는 것 같습니다. 내 지부에서 A 부분을 지웠습니까? –

+0

그래서 내가 겪은 것은 DiffEntry가 어디에서 왔는지입니다 ... 오래된 지점, 새로운 지점 또는 둘 다. DiffCommand가 어떤 이유로 API를 사용할 수없는 다른 API 접근 방식을 결정할 수 없다면? 성능 저하가 크지 않은 무언가, 가급적이면 diff 출력을 파싱하는 것이 (때때로 수십, 수백 또는 수천 개의 파일을 처리 할 수있는 것처럼) 보이는 것입니다. –

+0

내게는 Git 개념 (예 : 분기 란 무엇인가, diff는 무엇인가?)에 대한 이해가 불일치하는 것 같습니다. 내 지식에 변화 유형 ADD는 실제 추가를 나타내며 DELETE는 실제 삭제를 나타냅니다. 의심스러운 점이 있다면, 귀하의 가정을 증명하거나 반증하기위한 테스트 케이스로 돌아가십시오. –