2016-07-15 19 views
7

Mam jedno repozytorium w dwóch różnych folderach (folder1 i folder2). W ciągu repozytoriów ma "oldFile" plikJGit wciągnięty pliki

W folder1 I wykonaj następujące czynności:

echo 123 > oldFile 
touch newFile 
git add newFile oldFile 
git commit -m "Change the oldFile from folder1 and add the newFile" oldFile newFile 
git push origin master 

potem, w folder2 zrobić kolejne kroki:

echo zxc > oldFile; 
git add oldFile; 
git commit oldFile -m "Change oldFile from folder2" 

W tym przypadku chcę uzyskać konflikt scalania

I chcę zobaczyć wyciągnięte pliki. Mam przykład z here.

ObjectId oldHead = repository.resolve("HEAD^{tree}"); //save old objectId 

PullResult pullResult = pullCommand.setProgressMonitor(new TextProgressMonitor(new OutputStreamWriter(System.out))).call(); 

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

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

W pullResult.getMergeResult().getMergeConflicts() mam tylko plik oldFile i zbieranie diffs jest pusty.

W prostym przypadku (gdy nie zmienię "OldFile" z folder2) kolekcja diffs nie jest pusta - ma 1 plik "newFile" i pullResult.getMergeResult().getMergeConflicts() jest emtpy (to oczywiście).

Co robię źle? Chcę uzyskać sprzeczne pliki i udane wyciągnięte pliki.

+0

Czyż 'komenda git pull' pokazać nazwy plików, które miały konflikty wraz z błędem konfliktu? –

Odpowiedz

4

znalazłem odpowiedź. Potrzebujesz skorzystać

ObjectId head = git.getRepository().resolve("refs/remotes/origin/HEAD^{tree}");

zamiast

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