こんばんは
nodeでhubotライクな先輩謹製botに機能追加していて git使いたかったのでやってみました。
googleやnpmで"npm git"で検索してみましたが、コレといったデファクトっぽい物が出ず。ググラビリティ低めですね。
simple-git なんだか使いやすそうだったのでsimple-git [https://www.npmjs.com/package/simple-git]を使ってみました。
使い方はその名の通りシンプルで、gitコマンドとほぼ一緒なので直観的◎。
例えば
require(‘simple-git’)().clone(‘gitリポジトリのパス’, ‘作業コピーのPath’);
や
reuqire(‘simple-git’)(‘作業コピーのpath’);
などなど
addしてcommitしてpushもできます。
require(‘simple-git’)() .add(‘addしたいfile’) .commit(‘コミットメッセージ’) .push([’-u’, ‘origin’, ‘master’], callback);
とっても使いやすいですね。
Promiseをつかい時はcallback処理内にてresolve()をcallすれば良いです。
ハマりポイント requireをファイル先頭でしてしまいたい派の私は、次のような記述をしてハマりました。
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); }