読者です 読者をやめる 読者になる 読者になる

msysgit の git bash here の初回起動を高速化

Git

最近 msysgit を使ってるんだけど、会社の PC だと何故か git bash here*1の初回起動時にえらく時間がかかっていた。
一回 git bash here してからはずっと開きっぱなしなうえ、間違って消してしまっても 2 回目以降は基本的にはすぐに立ち上がったので放置していた・・・
んだけど、さすがに 1 分以上待たされるのは精神衛生上好ましくないので、ちょっと原因を探ってみた。
バージョンは 1.6.4-preview20090730 で、それ以外がどうかは不明。


原因は、git のインストールフォルダにある etc/git-completion.bash の中の __git_all_commands 関数で使われている、git help -a の呼出しにあった。
このコマンド、今これを書いている PC で実行するとすぐ終るんだけど、会社のノート PC で実行するとえらい時間がかかる。それこそ 1 分くらいかかる・・・
ちなみに、__git_all_commands 関数はこんな関数。

__git_all_commands ()
{
    if [ -n "${__git_all_commandlist-}" ]; then
        echo "$__git_all_commandlist"
        return
    fi
    local i IFS=" "$'\n'
    for i in $(git help -a|egrep '^ ')
    do
        case $i in
        *--*)             : helper pattern;;
        *) echo $i;;
        esac
    done
}

ってことでこいつをどうにかすればいいわけだけど・・・
ソースを弄ってどうのこうのするのはだるいので、その場しのぎの解決策で・・・

$ __git_all_commands | sed 's/^/echo /' > git-all-commands

そして git-all-commands をエディタで開いて全選択、その後・・・

__git_all_commands ()
{
echo add
# 略
echo rebase
}

貼り付けw
これはひどい・・・
でもこれで 1 分以上待たされてたのに、10 秒程度になったのでとりあえず満足。


ちなみに、Vista とかだと clip コマンドがあるので、git-all-commands なんてファイル作らずに直接クリップボードに流し込める。

$ __git_all_commands | sed 's/^/echo /' | clip

便利。

*1:msysgit を入れるとエクスプローラーのコンテキストメニューが拡張され、git bash here という項目が追加される