やぐブロ

yag + programming + hateblo

globalな.gitignoreを設定する

間違って.DS_Storeがgitリポジトリに混ざった状態でコミットしてしまったらしく,後になって指摘されて初めて気付くというgit初心者っぽりを遺憾なく発揮してしまった.確かにコミットのコメントが全然違う部分にも適用されてて,変だと思ってはいたのですが.....自分にとっては初めての多人数での共用リポジトリなので,もう少し注意しなければ.

現状確認

$  git log --stat
commit ...
Author: yag_ays <...>
Date:   Tue Jan 17 21:30:01 2012 +0900

   ...

 /.DS_Store                   |  Bin 0 -> 6148 bytes
 /src/.DS_Store               |  Bin 0 -> 6148 bytes
...

(ノ∀`) アチャー.ごめんなさい....

.gitignoreの設定

ということで..gitignoreを設定して,特定ファイルをコミットできないようにする.今回は全てのgitリポジトリで指定した.gitignoreが有効になるようglobalに設定.今回は.DS_Storeと.gitignore自身を追加する.

$ git config --global core.excludesfile ~/.gitignore 


設定出来ているか確認.

$ git config --global --list
...
core.excludesfile=/Users/yag_ays/.gitignore
...

取り敢えず,これで大丈夫なはず.あとは個別のgitリポジトリそれぞれに関して.gitignoreを設定しておけば問題ないでしょう.

gitの復習(Git Immersion, GUI...etc)

知り合いとの勉強会でgithubを使うことになり,gitの使い方を復習している.といっても過去の使用歴は殆ど無いに等しく,addやcommitだけを覚えてgithubの投稿用としてだけ使ってたりと,復習というよりかは1から再勉強という感じが強い.ちょっと使っては忘れてまた覚えなおす...というのを繰り返しており非常に効率が悪く勿体無いということで,今回はしっかりgitに慣れ親しむ心積もりで,EdgeCaseで実践しながらコマンドを再確認したりGUIのgitツールに手を出している.

Git Immersion

実際にgitを使いながらコマンドの使い方を覚えられる.書いてある英語は簡単だし,最悪コマンドの部分さえ読んでれば大体何をやってるか分かるので良い.
Git Immersion - Brought to you by EdgeCase

コマンドのエイリアス設定

取り敢えず,git immersionの中で出てくるaliasを殆どそのまま.gitに書きこんでいる.

[alias] 
        co = checkout
        ci = commit
        st = status
        br = branch
        hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
        type = cat-file -t
        dump = cat-file -p

.zshrcに纏めて書いたほうが楽かも.

GUIを使う

GUIも試してみる.スクリーンショットはlab.30くらいに撮ったもの(中だるみしてきたので息抜きにメモを書いている).

gitk

MacPortsでgitを入れるとついてくるGUIツール.取り敢えずは可視化できる.
f:id:yag_ays:20120115043246p:plain

GitX

git initしたディレクトリを指定すれば,後はよしなにNetworkやdiffを可視化してくれるので便利.ただ,GitXはメインの開発が終了してしまったらしく,使い続けるのは少し躊躇われる....

f:id:yag_ays:20120115040204p:plain

GitX (L)

開発が終了したGitXからフォークして作られたもの.若干GUIに手が加えられてある.アプリケーション名は"GitX.app"で,フォーク前のGitXと同じ.
f:id:yag_ays:20120115044329p:plain
GitX (L)

他に試したいことのメモ

screenがdetachできないときはsshdプロセスを殺す

生きているはずのscreenセッションがdetachできない問題.回線が落ちたのにscreenが自動でdetachされないというのは時々あるが,今回の場合はいくらscreen -dしてもdetachされない.非常に厄介だ.

現状確認

screenの状態を確認してscreen -dでdetachするも,効果がない.

$ screen -ls
There is a screen on:
	1028.pts-19.hoge	(Attached)
1 Socket in /var/run/uscreens/yag_ays

$ screen -d
[1028.pts-19.hoge detached.]

$ screen -ls
There is a screen on:
	1028.pts-19.hoge	(Attached)
1 Socket in /var/run/uscreens/yag_ays

解決

screenを開いているsshdが生きていることが原因のようなので,一度killで落としてから再度screen -d; screen -Rすることで問題を解消できる.

$ ps x | grep sshd
22147 pts/25   S+     0:00 grep sshd
29364 ?        S      0:00 sshd: yag_ays@pts/17                            
30928 ?        S      0:00 sshd: yag_ays@pts/25 
$ kill -9 29364
$ screen -d
$ screen -R

これでscreenセッションを復旧することができる.間違っても新しい方のsshdを消してしまわない様に....

これは恐らく,sshで多段ログインしている環境で回線が落ちると,何らかの原因で多段先にログインしているサーバにSIGHUPが送られないからだと思われる.これに関しては対策ができなさそうなので,screenをきっちりdetachしてから落ちるなどして日頃注意しておくしかないか....

注意

今回示したscreenがdetachできないというケースは非常特殊な環境下で頻発しているものであり,普通に設定しているサーバなら滅多に起こらない現象だと思う.

Mac OS XでRVM環境のセッティング(依存ライブラリ周り)

だいぶ前にやった作業だけれども,メモ程度に一応纏めておく.
Mac OS XでRVM(Ruby Version Manager)を使ってRubyを入れるときには,opensslやiconv周りでインストールやその後の実行コケる可能性が高い.あまりきちんと確認していないが,自分の場合Rubyのコンパイルに失敗したり,gemでjsonを入れられなかったりと,だいぶ苦労した覚えがある.そのため,rvmで関連するライブラリを一括でDLして,依存関係をrvm内で完結させたほうが良いっぽい.
環境はMac OS X 10.7 , RVM 1.10.0.

$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
$ rvm pkg install ree_dependencies
$ rvm install 1.9.2 --with-readline-dir=$rvm_path/usr --with-iconv-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr

RVMで苦労している人が多いしバージョンによってコマンドが変わったりして面倒なので,RVM使わないという選択肢がベストかもしれない....

Clojure + Emacs環境のセッティング(MacOSX Lion 10.7)

ClojureとLeiningenをインストールする

$ sudo port install clojure +rlwrap
$ sudo port install leiningen

下準備として,EmacsのPackageを設定する

現在使用しているEmacsが23.3.1のため,load-pathの通っているディレクトリにPackage.elを手動で入れる.

$ cd .emacs.d/elisp/ 
$ wget http://repo.or.cz/w/emacs.git/blob_plain/1a0a666f941c99882093d7bd08ced15033bc3f0c:/lisp/emacs-lisp/package.el  

.emacsに書きこむ.

(require 'package)
(add-to-list 'package-archives 
             '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)

Clojure modeのセッティング(Packageでclojure-modeなどを入れる)

M-x package-install clojure-mode
M-x package-install paredit
M-x pacakge-install slime
M-x package-install slime-repl

.emacsに書きこむ.

(require 'clojure-mode)
(defun turn-on-paredit () (paredit-mode 1))
(add-hook 'clojure-mode-hook 'turn-on-paredit)

Leiningenを使ってSwank Clojureを入れる

$ lein plugin install swank-clojure 1.3.4  # ~/.lein/bin/に入る

使ってみる(Leiningenでプロジェクト作成し,Emacsでcljを開く)

$ lein new test
$ cd test
$ emacs src/test/core.clj 
M-x clojure-jack-in