趣味のプログラミングや仕事をgithubを使って行なっていると、「ちょっとこんなかんじの変更してみたんだけど、このcommit見てよ」とか、「このブランチのこのファイルちょっと見てくれない?」みたいなことがよく起こります。そういう時いちいちgithub上のページをポチポチ押して、URLを教えるみたいなことをやっているのが大変だったので、ターミナルからgithub上のページを開くコマンドを作ってみました。すでにこういうのあるかもしれません。
今回のコマンドで出来ること
- commitを指定してgithub上の該当commitページを開く
- HEAD^みたいな指定も出来る
- ファイル名を指定して現在のブランチのそのファイルのページを開く
- 行を指定してハイライトさせることも出来る
- それらのコマンドをエディタなどから使うことでさらに便利に使う
openコマンドとperlに依存しているので、これらが使えない人は適宜コマンドいじってみてください。
open-github-from-commit
これはcommitを指定することで現在のrepositoryの該当commitページを開くコマンドです。https://github.com/shibayu36/config-file/blob/master/bin/open-github-from-commit においてあります。
使い方は以下のとおり。
# HEADのcommitページを開く # https://github.com/shibayu36/config-file/commit/3fd0b26f83ae51de7bfdcb2cb2ca0a2cdfea05cf みたいなページが開く open-github-from-commit # commitを指定してページを開く open-github-from-commit 07c40b8 # HEAD^ みたいな指定も出来る open-github-from-commit HEAD^
以下の様なページがブラウザで開かれます。
open-github-from-file
これはファイルを指定することで現在のrepositoryの、現在のbranchの該当ファイルページを開くコマンドです。
使い方は以下のとおり。
# ファイルを指定して開く # masterにいた場合、https://github.com/shibayu36/config-file/blob/master/bin/open-github-from-commit のようなページが開く open-github-from-file bin/open-github-from-commit # ディレクトリ指定も可能 open-github-from-file bin/ # repositoryのtopにいなくてもやってくれる cd bin; open-github-from-file open-github-from-commit # branch変えたらそのbranchのファイルを見てくれる git checkout other-branch; open-github-from-file bin/open-github-from-commit # lineを指定するとハイライトした状態で表示してくれる open-github-from-file bin/open-github-from-commit 5 # lineの範囲指定も出来る # 5~15行目をハイライト open-github-from-file bin/open-github-from-commit 5 15
以下の様なページがブラウザで開かれます。
hub.host
上の2つのコマンドはhubコマンドと同様、hub.hostを設定しておくことでgithub enterpriseなどを使っていても使うことができます。例えば以下の様な設定をrepository上でやっておけば良いです。
git config --local hub.host my.git.org
エディタからコマンドを使って更に便利に
ファイルの行指定は普通にコマンドラインから使うと便利ではありませんが、エディタから利用してあげると非常に便利になります。
例えばemacsで以下のような設定をします。
(defun chomp (str) (replace-regexp-in-string "[\n\r]+$" "" str)) (defun git-project-p () (string= (chomp (shell-command-to-string "git rev-parse --is-inside-work-tree")) "true")) (defun open-github-from-current () (interactive) (cond ((and (git-project-p) (use-region-p)) (shell-command (format "open-github-from-file %s %d %d" (file-name-nondirectory (buffer-file-name)) (line-number-at-pos (region-beginning)) (line-number-at-pos (region-end))))) ((git-project-p) (shell-command (format "open-github-from-file %s %d" (file-name-nondirectory (buffer-file-name)) (line-number-at-pos))))))
これをしたあとに以下の様な状態で、open-github-from-currentを実行してあげます。
そうすると選択範囲がハイライトされた状態でgithubが開きます。
これがあると、branchを変えていろいろ編集して後に、ちょっとこの部分レビューしてよみたいなのが簡単に出来て、非常に捗ります。emacsではコマンドを使っているだけなので、別のエディタでも簡単に同じようなことをできますね。
今回の技術的tips
git rev-parse
gitのrepository上のいろいろな情報を見ることが出来るコマンド。今回はHEAD^などをcommitのsha1に変更するのに使っています。それ以外にもいろいろ使い道があります。
# HEADのSHA1 git rev-parse HEAD # repositoryのworking-dirにいるかどうか # 中に入ればtrueという文字列が変える git rev-parse --is-inside-work-tree
現在のbranch名取得
色々方法はあると思いますが、一例として。
# refs/heads/masterみたいなのが返ってくる git symbolic-ref HEAD 2> /dev/null
repositoryのconfigを取得
hub.hostの情報取ってくるのに使っています。
git config --get hub.host
おまけ open-github-from-issue
issueを開くコマンドも同じように作ってみました。
https://github.com/shibayu36/config-file/blob/master/bin/open-github-from-issue においてあります。
open-github-from-issue 2