2016-03-27 9 views
13

NodeGit oferuje łatwy sposób na zdobycie diff wszystkich obecnych zmian bez stopniowego zmian:nodegit dostać diff wszystkim wystawił plików

import NodeGit, { Diff } from 'nodegit'; 

function getUnstagedChanges(path) { 
    const repo = await NodeGit.Repository.open(path); 
    const diff = await Diff.indexToWorkdir(repo, null, { 
    flags: Diff.OPTION.INCLUDE_UNTRACKED | 
      Diff.OPTION.RECURSE_UNTRACKED_DIRS 
    }); 
    console.log(await diff.patches()); 
} 

getUnstagedChanges(); 

istnieje podobne rozwiązanie, aby uzyskać diff wszystkim wystawił zmiany?

Odpowiedz

4

Ok znalazłem sposób - jednak to nie zadziała zanim pierwszy commit powstał:

import NodeGit, { Diff } from 'nodegit'; 

function getStagedChanges(path) { 
    const repo = await NodeGit.Repository.open(path); 
    const head = await repository.getHeadCommit(); 
    if (!head) { 
    return []; 
    } 
    const diff = await Diff.treeToIndex(repo, await head.getTree(), null); 
    const patches = await diff.patches(); 
    console.log(patches.map((patch) => patch.newFile().path())); 
} 

getStagedChanges(); 
1

To dziwne, że nie widzisz zmian etapowych, ponieważ indexToWorkdir działa dokładnie tak, jak git diff i wyświetla tylko etapowe zmiany. Napisałem przykład, który działa dla mnie. Pokazuje różnice w plikach inscenizowanych i niezamkniętych w pliku diff, spróbuj. W przypadku opcji pomijania wyświetlane są tylko pliki etapowe.

zajmują się także o wymianie Diff.OPTION.INCLUDE_UNTRACKED do Diff.OPTION.SHOW_UNTRACKED_CONTENT

import path from 'path'; 
import Git from 'nodegit'; 

async function print() { 
    const repo = await Git.Repository.open(path.resolve(__dirname, '.git')); 
    const diff = await Git.Diff.indexToWorkdir(repo, null, { 
     flags: Git.Diff.OPTION.SHOW_UNTRACKED_CONTENT | Git.Diff.OPTION.RECURSE_UNTRACKED_DIRS 
    }); 

    // you can't simple log diff here, it logs as empty object 
    // console.log(diff); // -> {} 

    diff.patches().then((patches) => { 
     patches.forEach((patch) => { 
      patch.hunks().then((hunks) => { 
       hunks.forEach((hunk) => { 
        hunk.lines().then((lines) => { 
         console.log("diff", patch.oldFile().path(), patch.newFile().path()); 
         console.log(hunk.header().trim()); 
         lines.forEach((line) => { 
          console.log(String.fromCharCode(line.origin()) + line.content().trim()); 
         }); 
        }); 
       }); 
      }); 
     }); 
    }); 

    return diff; 
} 

print().catch(err => console.error(err)); 
+0

indexToWorkdir dopasowuje WorkDir przeciw bieżący indeks (wystawiony), tak aby wyświetlał tylko pliki niezarządzane. – jantimon

+0

wypróbowany bez żadnego zatwierdzenia w repozytorium, działa. –

+0

Próbuję odtworzyć górną część (pliki etapowe): http://blog.sourcetreeapp.com/files/2014/08/Screen-Shot-2014-08-19-at-2.02.03-PM.png – jantimon

Powiązane problemy