2016-07-15 115 views
7

Ho un repository in due cartelle diverse (folder1 e folder2). All'interno repository ha un fileJGit ottiene file estratti

Nel folder1 faccio le seguenti fasi "oldFile":

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 

Dopo di che, nel folder2 faccio prossimi passi:

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

In questo caso voglio ottenere un conflitto di unione

E voglio vedere i file estratti. Ho preso l'esempio da 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(); 

In pullResult.getMergeResult().getMergeConflicts() ho solo file oldFile e la raccolta diffs è vuota.

In un caso semplice (quando io non cambio la "vecchiofile" dal folder2) la raccolta diff non è vuoto - ha 1 il file "newFile" e pullResult.getMergeResult().getMergeConflicts() è vuoto Fai (è ovvio).

Cosa faccio di sbagliato? Voglio ottenere file in conflitto e file tirati con successo.

+0

non il comando 'git pull' mostra si file nomi che avevano conflitti insieme con errore di conflitto? –

risposta

4

Ho trovato la risposta. Hai bisogno di utilizzare

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

invece di

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