2015-12-29 10 views
14

Ich möchte die ID/Hash des letzten Commits auf dem aktuellen Zweig in NodeJS erhalten.Get Hash des letzten Git-Commits im Knoten

In NodeJS möchte ich die neueste ID/Hash, in Bezug auf Git und Commits davon erhalten.

+0

und wo steckst du fest? – Sirko

+0

@Sirko Ganz am Anfang? – Noah

+0

Sie haben anscheinend bereits das richtige Knotenmodul gefunden. Afaik gab es zB genau zu tun, was du willst. – Sirko

Antwort

13

Neben Paulpro beantworten Sie exec verwenden können.

require('child_process').exec('git rev-parse HEAD', function(err, stdout) { 
    console.log('Last commit hash on this branch is:', stdout); 
}); 
+0

Diese Option wählen, weil ich möchte, dass Sie nicht wie in Paulpro's Antwort einen 'path_to_repo' angeben müssen. – Noah

8

Mit nodegit, mit path_to_repo definiert als eine Zeichenfolge, die den Pfad zu dem Repo enthält, den Sie für den Commit sha erhalten möchten. Wenn Sie das Verzeichnis Ihres Prozesses von läuft verwenden möchten, dann ersetzen path_to_repo mit process.cwd():

var Git = require('nodegit'); 

Git.Repository.open(path_to_repo).then(function(repository) { 
    return repository.getHeadCommit(); 
}).then(function (commit) { 
    return commit.sha(); 
}).then(function (hash) { 
    // use `hash` here 
}); 
+0

nur FIY auf meinem Rechner, das ist ungefähr 3,2 mal schneller als die mehr akzeptierte Antwort von @ antoine129. execSync dauert etwa 6,4 ms, während nodegit nur etwa 1,8 ms benötigt. – Capaj

0

Sie auch git-fs verwenden können (es Namen auf npm ist git-fs, auf Github es node-git.)

Git('path/to/repo') 
Git.getHead((err, sha) => { 
    console.log('The hash is: ' + sha) 
}) 

Das gleiche Modul Verzeichnisse und Dateien aus dem Repo lesen kann.

44

Short-Lösung, kein externes Modul (synchrone Alternative zu Edin Antwort) benötigt:

revision = require('child_process') 
    .execSync('git rev-parse HEAD') 
    .toString().trim() 

und wenn Sie manuell das Stammverzeichnis des git Projekt angeben möchten, verwenden Sie das zweite Argument von execSync das passieren cwdoption, wie execSync('git rev-parse HEAD', {cwd: __dirname})

+5

Verwenden Sie '.slice (0, 7);', um sha zu erhalten. –

+11

@DanielSteigerwald oder 'git rev-parse - kurz HEAD' – Hendry

0

Wenn Sie immer auf bestimmten Zweig sind, können Sie .git/refs/heads/<branch_name> lesen leicht Hash begehen zu bekommen.

const fs = require('fs'); 
const util = require('util'); 

util.promisify(fs.readFile)('.git/refs/heads/master').then((hash) => { 
    console.log(hash.toString().trim()); 
}); 
Verwandte Themen