Node

2015-12-29 46 views
14

'daki en son git taahhüdünün özetini al, NodeJS'de mevcut şube hakkında en son işlemin id/hash değerini almak istiyorum.Node

NodeJS'de, en son id/hash'ı gitmek ve bununla ilgili olarak almak istiyorum.

+0

ve nereye takıldınız? – Sirko

+0

@Sirko En baştan mı? – Noah

+0

Zaten doğru düğüm modülünü buldunuz. Afaik, tam olarak ne yapmak istediğinize örnek oldu. – Sirko

cevap

13

cevap.

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

Bunu seçerek, Paulpro'nun cevabı gibi bir 'path_to_repo' belirtmek zorunda kalmamanızı isterim. – Noah

8

'u kullanarak, path_to_repo kullanarak, repo'yu almak istediğiniz repo yolunu içeren bir dizgi olarak tanımlayın. Eğer süreç itibaren çalıştığı dizini kullanmak istiyorsanız, o zaman process.cwd() ile path_to_repo değiştirin: Eğer exec kullanabilirsiniz Paulpro ek olarak

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

Sadece makinemde FIY, @ antoine129'dan gelen daha kabul edilen yanıttan yaklaşık 3.2 kat daha hızlıdır. execSync yaklaşık 6.4 ms sürer, nodegit ise sadece 1.8 ms alır – Capaj

0

Ayrıca git-fs kullanabilirsiniz (NPM üzerine o kişinin adını git-fs ise, Github o düğüm-git bu.)

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

aynı modül repo dizinleri ve dosyaları okuyabilir.

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

ve el git projenin kök dizinini belirtmek istiyorsanız, geçmek execSync ikinci argüman kullanın:

44

Kısa bir çözüm, harici modülü (Edin cevabı senkron alternatif) gerekli cwdoption,

+5

'.slice (0, 7);' kısa tutacak şekilde kullanın. –

+11

@DanielSteigerwald veya 'git rev-parse --short HEAD' – Hendry

0

her zaman belirli dal üzerinde ise execSync('git rev-parse HEAD', {cwd: __dirname}) gibi, kolayca karma taahhüt almak için .git/refs/heads/<branch_name> okuyabilir.

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

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