J'aimerais obtenir l'id/hash du dernier commit sur la branche actuelle de NodeJS.
Dans NodeJS, j'aimerais obtenir l'id/hash le plus récent, en ce qui concerne git et les commits.
Solution n ° 1 (git requis, avec rappel):
require('child_process').exec('git rev-parse HEAD', function(err, stdout) {
console.log('Last commit hash on this branch is:', stdout);
});
Vous pouvez éventuellement utiliser execSync()
pour éviter le rappel.
Solution n ° 2 (aucun git requis):
.git/HEAD
.git/refs/heads/current-branch-name
.git/refs/heads/master
Cela peut être codé avec quelque chose comme:
const rev = fs.readFileSync('.git/HEAD').toString();
if (rev.indexOf(':') === -1) {
return rev;
} else {
return fs.readFileSync('.git/' + rev.substring(5)).toString();
}
Solution courte, aucun module externe nécessaire (alternative synchrone à la réponse d'Edin):
revision = require('child_process')
.execSync('git rev-parse HEAD')
.toString().trim()
et si vous voulez spécifier manuellement le répertoire racine du projet git, utilisez le deuxième argument de execSync
pour passer la cwd
option , comme execSync('git rev-parse HEAD', {cwd: __dirname})
Utilisation de nodegit , avec path_to_repo
défini comme une chaîne contenant le chemin du référentiel pour lequel vous souhaitez obtenir la validation sha. Si vous souhaitez utiliser le répertoire à partir duquel votre processus est en cours d'exécution, remplacez path_to_repo
par 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
} );
Si vous êtes toujours sur une branche spécifique, vous pouvez lire .git/refs/heads/<branch_name>
pour obtenir facilement le hachage de validation.
const fs = require('fs');
const util = require('util');
util.promisify(fs.readFile)('.git/refs/heads/master').then((hash) => {
console.log(hash.toString().trim());
});
Vous pouvez aussi utiliser git-fs (son nom sur npm est git-fs, sur Github c'est node-git.)
Git('path/to/repo')
Git.getHead((err, sha) => {
console.log('The hash is: ' + sha)
})
Le même module peut lire les répertoires et les fichiers du référentiel.