2015年1月26日月曜日

WindowsのAtomでgit-plusが入らなかった話

最近Emacsにも飽きてきたから、gitとの親和性が高そうなAtomに乗り換えようとしている。

その中で、git-plusというパッケージがインストール出来なかった。
エラーメッセージは
Command failed: fatal: could not create work tree dir 'c:\ファイルパス\npm-10856-e1a1dfc8\1420633333522-0.860646930988878\4feb1e9760e5ae6c15b4d41fd6c5115feb7cacd3'.: No such file or directory
こんな感じ。
Macでは普通に入ったから原因が特定しづらかった。
根本の原因はnpmが古かったこと。

ここを読むとどうやら1週間くらい前に発覚したバグらしい。
「npm@2.3.0で治すから!」って言っていて、報告者もfixを確認したらしいのでnpmをアップデートした。

ところが、やっぱり入らない。
何でやと思って、
apm -v
してみると、
PS C:\Users\> apm -v
apm  0.123.0
npm  2.1.18
node 0.10.35
python 2.7.6
git 1.8.1.msysgit.1
visual studio
こんな表示が。
apmはシステムのnpmとは別に独自にnpmを持っているらしい。

ならば、ということで、npmを差し替えた。
node.jsのインストールフォルダの
nodejs\node_modules\npm

ユーザフォルダ\AppData\Local\atom\app-version\resources\app\apm\node_moduelsへコピーした。

たぶん待ってたら数日後とかにapmがアップデートされてnpm@2.3がそのうち入ると思うので、それまでの応急策に。
(あと正当にapmのnpmをアップデートする方法があるのかも知れない)

Windowsではnpmのアップデートに手こずることもあるが、公式のここをみればやりかたが書いてある。

2015年1月22日木曜日

Windowsのgitでpushされたらpullするスクリプトをpost-receiveに書く

gitで共有するリポジトリは--bareオプションを付けてinitし、ベアリポジトリで作成する。
ただその場合はファイルの実体はなく、下の画像のようなよくわからんファイル群しか見えない。




そこで、(gitを使わず)ファイルを直接開きたいニーズに答えるため、リポジトリからpullするだけの参照用ディレクトリを作ることがある。
その場合、ベアリポジトリにpushされたら自動的に参照用ディレクトリがpullしてくれると嬉しい。
それを実現するのがベアリポジトリのhooks/post-receiveスクリプト。
ここまでのgit構成を図にすると下のような感じ。




このときpost-receiveに指定するパスがわからなかった。
サーバマシン上のディレクトリ移動なんだから、gitのパス表記にのっとって
/C/share/folder/path
とか書いたらそんなパス無いと怒られる。

Windowsの共有フォルダを使用する場合のパス設定は
cd '//共有マシン名/参照用gitフォルダまでのパス'
git --git-dir='.git' pull origin master
とすれば良かった。

ググってもWindowsの共有フォルダで設定してる例がなかったのでわかりづらかったが、post-receiveのcdコマンドの前に
echo `pwd`
と打てば現在どこのフォルダにいるかわかるので、そこからパスを類推すれば良い。

ただこの構成だとpushした時にうっかり参照用ディレクトリのファイルを開いていると参照用ディレクトリが更新されなくなり、ベアリポジトリと齟齬が発生する状態となってしまうので注意が必要。