Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2012-09-17

Git リポジトリの Web サイト (GitHub とか) を簡単に開けるコマンドを作った

| 22:50 | Git リポジトリの Web サイト (GitHub とか) を簡単に開けるコマンドを作った - NaN days を含むブックマーク はてなブックマーク - Git リポジトリの Web サイト (GitHub とか) を簡単に開けるコマンドを作った - NaN days

git-browse-remote というコマンドです。

インストール

今回はじめて RubyGems としてシェアさせていただきましたので

gem install git-browse-remote

でインストールできます。git browse-remote というサブコマンドが使えるようになります。

できること

  • 現在のリポジトリをホストしている Web サイトをブラウザで開きます
  • ブランチやコミットを指定するといい感じに対応するページを開きます

使い方

とりあえずインストールしたらまずは以下を実行してください。

% 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 常用してないので分からない……。

どうぞご利用ください。