SourceTreeでサブモジュールの作成に失敗する

やりたい

SourceTree(v2.3.1)でサブモジュールを作りたい。

できない

以下のようなエラーが出る。

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule add -f https://username@github.com/organization/repo.git hoge/fuga 
Cloning into 'hoge/fuga'...
warning: templates not found /usr/local/git/share/git-core/templates
fatal: could not read Password for 'https://username@github.com': Device not configured
fatal: clone of 'https://username@github.com/organization/repo.git' into submodule path 'hoge/fuga' failed
Completed with errors, see above

しらべる

SourceTreeのバグっぽい。

Submodule with different user fails to clone/push with Sourcetree - Atlassian Answers

自分の持ち物じゃないリポジトリをSourceTreeでサブモジュールにしようとするとエラーを吐くようだ。

確かに会社での作業だったので、
- (会社のOrganizationが持つ)Aリポジトリ に、
- (会社のOrganizationが持つ)Bリポジトリ を、
- 自分のユーザ
サブモジュールとして追加しようとしていたから、この現象だと思う。

かいけつ

SourceTreeのバグなので、コマンドで実行する。

git submodule add https://github.com/organization/repo.git hoge/fuga

できた。

追加さえできれば、SourceTreeのサブモジュールの欄に出てくるし、サブモジュールのコミット履歴ウィンドウも開ける。

Raspberry PiとNode.jsでWebからGPIO操作

Control your Raspberry PI GPIO in Real Time via the Browser using NodeJS, Socket.IO and pi-gpio – Grosan Flaviu Gheorghe

jsからRaspiのGPIOを操作する

jsGPIO を使う。

github.com

READMEにある通り準備をする。

Node.jsのインストール

よしなに。

quick2wire-gpio-admin のインストール

github.com

これもREADME通りに入れればいいが、少し説明が古いので追記。

make
sudo make install

gpioグループを追加する。
サンプルではsudo adduser $USER gpioとなっているが動かなかったので、usermodで。

sudo usermod -aG gpio $USER

debian系であるraspbianならadduser使えるはずなんですけどね。
Linuxでユーザーをグループに追加する - Qiita

次に22pinを例に以下のような操作があるものの、Permission Deniedばかりで全然うまくいかない。

% gpio-admin export 22
% cat /sys/devices/virtual/gpio/gpio22/value
0
% echo out > /sys/devices/virtual/gpio/gpio22/direction
% echo 1 > /sys/devices/virtual/gpio/gpio22/value

gpioのパスが変わってるんだそうな。 プルリクは飛んでるのにマージされてないらしい。

github.com

ということでプルリクの通りに src/gpio-admin.cを直す。28行目くらい。

static void allow_access_by_user(unsigned int pin, const char *filename) {
  struct stat info;
  char *sys_path = "/sys/class/gpio/gpio%u/%s";
  if (stat("/sys/class/gpio", &info) != 0)
    sys_path = "/sys/devices/virtual/gpio/gpio%u/%s";

  char path[PATH_MAX];
  int size = snprintf(path, PATH_MAX, sys_path, pin, filename);

これで % gpio-admin export 22 が叩けるようになる。


あとは

npm start

なり、

nodejs example-server.js

なりを実行。localhost:8000で動作を確認。

忘備録

テストしまくってたらポートが被ってnode.jsが起動しなかった qiita.com