我想在NodeJS中获取当前分支上最近提交的id/hash.
在NodeJS中,我想获得最新的id/hash,关于git和commits.
简短的解决方案,无需外部模块(同步替代Edin的答案):
revision = require('child_process') .execSync('git rev-parse HEAD') .toString().trim()
如果你想手动指定git项目的根目录,使用第二个参数execSync
来传递cwd
选项,比如execSync('git rev-parse HEAD', {cwd: __dirname})
解决方案#1(需要git,带回调):
require('child_process').exec('git rev-parse HEAD', function(err, stdout) { console.log('Last commit hash on this branch is:', stdout); });
(可选)您可以使用execSync()
以避免回调.
解决方案#2(无需git):
获取文件的内容 .git/HEAD
如果git repo处于分离头状态,则内容将是哈希
如果git repo在某个分支上,则内容将类似于:"refs:refs/heads/current-branch-name"
得到的内容 .git/refs/heads/current-branch-name
处理此过程中的所有可能错误
要直接从主分支获取最新的哈希值,您可以获取该文件的内容: .git/refs/heads/master
这可以用以下代码编码:
const rev = fs.readFileSync('.git/HEAD').toString(); if (rev.indexOf(':') === -1) { return rev; } else { return fs.readFileSync('.git/' + rev.substring(5)).toString(); }
使用nodegit,path_to_repo
定义为包含要获取提交sha的repo路径的字符串.如果要使用运行该进程的目录,请替换path_to_repo
为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 } );