2012-09-17
Git リポジトリの Web サイト (GitHub とか) を簡単に開けるコマンドを作った
Git | |
git-browse-remote というコマンドです。
インストール
今回はじめて RubyGems としてシェアさせていただきましたので
gem install git-browse-remote
でインストールできます。git browse-remote
というサブコマンドが使えるようになります。
できること
- 現在のリポジトリをホストしている Web サイトをブラウザで開きます
- 正確には git-web--browse で開こうとします
- ブランチやコミットを指定するといい感じに対応するページを開きます
使い方
とりあえずインストールしたらまずは以下を実行してください。
% git browse-remote --init Writing config for github.com... Mappings generated: browse-remote.github.com.top https://{host}/{path} browse-remote.github.com.ref https://{host}/{path}/tree/{short_ref} browse-remote.github.com.rev https://{host}/{path}/commit/{commit}
これで GitHub 用の設定が ~/.gitconfig に記録されます。browse-remote.github.com.top みたいな設定項目が増えているはずです。
で、任意のローカルにある (origin が GitHub を向いている) リポジトリに cd して
% git browse-remote
とすると、GitHub のページが開くはずです。引数にコミットやブランチを指定することもできて、たとえば cpanminus をクローンしたディレクトリで
% git browse-remote 1.5000
のようにタグ (またはブランチ) を指定すると https://github.com/miyagawa/cpanminus/tree/1.5000 が、
% git browse-remote 215cb345
のようにコミットを指定すると https://github.com/miyagawa/cpanminus/commit/215cb345d4312c744e7a299a7a33dbc6db33df74 がブラウザで開かれます。無指定の場合は現在 (HEAD) のブランチ/コミットが参照されます。
開かれうるページは 3 種類あり、そのリポジトリのリモートの URL を参照して、ウェブ上のリポジトリビューワの、
- master ブランチの場合はプロジェクトのトップ (--top)
- その他のブランチ/タグの場合はそれに対応するブランチ/タグのページ (--ref)
- それ以外であれば1コミットのページ (--rev)
を開きます。(括弧内はそのページを開くことを強制するコマンドラインオプションです)
さらに以下のように remote が複数ある場合、
% git config --get-regexp '^remote\..*\.url$' remote.origin.url git://github.com/miyagawa/cpanminus.git remote.motemen.url git@github.com:motemen/cpanminus.git
% git browse-remote motemen/master # もしくは motemen (motemen というタグやブランチがない場合)
で、motemen がフォークしたプロジェクトのページ (https://github.com/motemen/cpanminus) を開くことができます。
URL のカスタマイズ
git-browse-remote は指定されたブランチ/コミットからどういったページを開くかを決定し、それぞれに用意されたテンプレートを用いて URL を組み立てます。--init 時に表示されている内容ですが、例えば GitHub の場合は ~/.gitconfig に
- browse-remote.github.com.top (プロジェクトのトップ)
- browse-remote.github.com.ref (ブランチ/タグ)
- browse-remote.github.com.rev (コミット)
という風に指定されています。社内リポジトリなど、特定のホストに対して独自のリポジトリビューワを使いたい場合には、git config browse-remote.my.host.top http://…
のようにして (または .gitconfig を直接編集して) これをカスタマイズすることができます。テンプレートで使える変数は以下のとおり。{} 内が Ruby のコードとして評価されるかんたんテンプレートです。
- host ("github.com")
- path ("motemen/git-browse-remote")
- ただの文字列ではなく、
{path[-2..-1]}
のようにスライスすることができます
- ただの文字列ではなく、
- ref ("refs/heads/master")
- short_ref ("master")
- commit ("04f7c64ba9d524cf311a673ddce5722b2441e2ea")
ちなみに GitHub Enterprise を使っているなど、配置が完全に GitHub と同じような場合には
% git browse-remote --init github.local=github Writing config for github.local... Mappings generated: browse-remote.github.local.top https://{host}/{path} browse-remote.github.local.ref https://{host}/{path}/tree/{short_ref} browse-remote.github.local.rev https://{host}/{path}/commit/{commit}
とすることで簡単に設定をおこなえます。一応 GitWeb 用に --init host=gitweb
というのも作ってますが、GitWeb 常用してないので分からない……。
どうぞご利用ください。