LoginSignup
12
8

More than 5 years have passed since last update.

nodeでgitを扱う

Last updated at Posted at 2016-10-25

nodeでgit使いたかったのでやってみました。

googleやnpmで"npm git"で検索してみましたが、コレといったデファクトっぽい物が出ず。ググラビリティ低めですね。


simple-git

なんだか使いやすそうだったのでsimple-gitを使ってみました。

使い方はその名の通りシンプルで、gitコマンドとほぼ一緒なので直観的◎。

例えば

require('simple-git')().clone('gitリポジトリのPath', '作業コピーのPath');

reuqire('simple-git')('作業コピーのpath').pull();

などなど

addしてcommitしてpushもできます。

require('simple-git')()
  .add('addしたいfile')
  .commit('コミットメッセージ')
  .push(['-u', 'origin', 'master'], callback);

とっても使いやすいですね。

Promiseをつかい時はcallback処理内にてresolve()をcallすれば良いです。


ハマりポイント

作業コピーがすでにあった場合はpull、なければcloneしたい時、
次のような記述をしてハマりました。

NGコード


const repoPath = 'path/to/repo',
          localPath= 'path/to/localDir';
let simpleGit = require('simple-git')(localPath); // NG


if (/* 作業コピーが既にある */) {
  simpleGit.pull();
} else {
  simpleGit.clone(repoPath, localPath);
}

これはclone()前だとrequire()時にlocalPathが存在せず、ENOENT吐いて落ちます。

workaroundとして下記のように都度require()します

const repoPath = 'path/to/repo',
          localPath= 'path/to/localDir';

if (/* 作業コピーが既にある */) {
  require('simple-git')().pull();
} else {
  require('simple-git')().clone(repoPath, localPath);
}

requireをファイル先頭でしてしまいたい派の私には辛い

12
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8