詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

git-browse-remote で現在のブランチに対応するプルリクエストを一発で開く

マジで……というわけで、現在のブランチや作業ディレクトリなどをもとに いいかんじに GitHub (など)をブラウザで開いてくれる git-browse-remote にこれに対応する機能を追加したバージョン 0.2.0 をリリースしました。

インストール/アップグレード

RubyGems.org にアップロードされているので、

gem install git-browse-remote

でインストールできます。

使い方

git browse-remote --pr

とすると、現在のブランチから発しているプルリクエストのページ(/<user>/<repo>/pull/<branch>)をブラウザで開きます。プルリクエストが存在していればそのページ(/pull/<number>)に、存在していないときはプルリクエストの作成画面になるみたいです。何かにエイリアスしておくと便利ですね。

いまのところ GitHub (および GitHub Enterprise)専用の機能になるけど、Bitbucket にも同様の URL があったら対応できそう。

GitHub でイシューからイシューを作るときに便利な userscript

とくに GitHub を使って仕事をしていると、あるイシューからそのサブイシューを生成する機会がよくあって、そういう時はサブイシューから親イシューを(#765 のようにして)参照しておくと便利なのだけれど、イシューをまとめて整理しているときにはこの細かい作業が面倒。そこで userscript を書いた。

github-userscripts/refer-issue-when-creating at master · motemen/github-userscripts · GitHub

挙動は簡単で、GitHub 上のイシューや Pull Request のページ内にある「New Issue」ボタンをクリックしたとき、イシュー作成フォームの本文やタイトルに、もともとのイシューを参照するような内容がフィルインされるというもの。本文にはイシュー番号、タイトルには元のイシューの名前が入ります。このへんは人の好き好きだと思うので、各自カスタマイズするとよいと思う。また、ボタンのクリック時に選択していた内容がタイトルに付与されるというのもおまけでついてます。

以下のアニメーション GIF を見ればわかりやすい。

f:id:motemen:20150123135611g:plain

いつもどおり、利用するには chrome://extension に .user.js をドラッグ&ドロップすればよい(Chrome の場合)。どうぞご利用ください。

#github tips: hub pull-request の向き先がリポジトリのデフォルトブランチにならないとき

引数なしの hub pull-request を実行すると、リポジトリのデフォルトブランチに向けたプルリクエストを作ってくれます。このデフォルトブランチはふつう master を向いてますが、変更可能なので Git Flow で言う develop 的なブランチをデフォルトブランチにしているプロジェクトもあると思います。

さて、このデフォルトブランチをプロジェクトの歴史の中のどこかの時点で変えると、新しく clone したリポジトリで hub pull-request すると当然 develop に向けてプルリクエストを作りますが、デフォルトブランチの変更以前にこのリポジトリを clone していたリポジトリで hub pull-request すると master に向けたプルリクエストを作ろうとしてしまいます。-b develop すれば develop を向くのだけど、これは事故の元……。

原因

hub pull-request-b {base} が与えられなかったとき refs/remotes/origin/HEAD という ref (GitHub のデフォルトブランチはこれに対応しています)を参照し、これが向いている先をデフォルトブランチとみなして、そのブランチに向けたプルリクエストを作成します。この origin/HEAD という symbolic ref は git clone 時に作成されるのですが、それ以外のタイミングでは更新されることがない。そのため、途中からデフォルトブランチを変更しても古いリポジトリでは追従できないわけです。

対策

以下のコマンドを実行する。

% git remote set-head --auto origin
origin/HEAD set to develop

リモートの Git リポジトリの HEAD を、手元に反映させます。めでたし。手元の HEAD がどうなっているかは、以下のコマンドで確認できます。

% git symbolic-ref refs/remotes/origin/HEAD

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

はてなで一緒に働きませんか?