Edited at

NodeGitでbranch作ってgit checkoutする流れ

More than 3 years have passed since last update.


NodeGit

とは、Node.jsでGitをあれこれするあれです。

これ NodeGit

現在の安定verは0.9.0のようです。

ドキュメントがout-of-date感あってハマりました。あと日本語の情報がないです。

とりあえず既存のリポジトリのHEADからgit checkout -b hogeするコードをexample見つつ書きました。

promise chainでひたすら繋げていきます。


git_co.js

var nodegit = require('nodegit');

var newBranch = 'hoge';
var localRep = './foooo'; //適当にリポジトリを用意

var repository;

nodegit.Repository.open(localRep)
//branch取得
.then(function(repo) {
repository = repo;
return repository.getCurrentBranch();
})
//head取得
.then(function(ref) {
console.log('On ' + ref.shorthand() + ' ' + ref.target());
return repository.getHeadCommit(ref);
})
//branch作成
.then(function(commit) {
console.log('Create newBranch');
return repository.createBranch(
newBranch, commit, 0, repository.defaultSignature(),
'Created newBranch on HEAD');
})
//checkout
.then(function(ref) {
console.log('On ' + ref.shorthand() + ' ' + ref.target());
console.log('Checking out ' + newBranch);
var checkoutOpts = {
checkoutStrategy: nodegit.Checkout.STRATEGY.FORCE
};
return repository.checkoutBranch(newBranch, checkoutOpts);
})
//branch取得
.then(function () {
return repository.getCurrentBranch();
})
//log
.then(function(ref) {
console.log('On ' + ref.shorthand() + ' ' + ref.target());
})
//詰んだ時用
.catch(function (err) {
console.log(err);
})
//happy
.done(function () {
console.log('Finished');
});


git checkout -b hogeがこんな姿になってしまいました。