詩と創作・思索のひろば

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

Fork me on GitHub

git-browse-remote 0.1.0 を公開しました & Vim からいい感じに GitHub を開く

git-browse-remote | RubyGems.org | your community gem host

git-browse-remote は、コマンドラインからいい感じに(リビジョンを指定したりファイルを指定したり)リポジトリのウェブサイトを開いてくれるツールです。

入れていた変更でまだ RubyGems に上げてなかったぶんをリリースしただけなんですが……。今回の変更で行番号(-L)に範囲が指定できるようになりました。

% git browse-remote -L 5,10 -- README.md

https://github.com/motemen/git-browse-remote/blob/master/README.md#L5-10 を開いてくれます。--stdout を指定すれば標準出力に URL を書き出すだけ、ってこともできます。

おまけで便利な Vim 設定を紹介。

command! -nargs=* -range GitBrowseRemote !git browse-remote --rev -L<line1>,<line2> <f-args> -- %

V などでビジュアル選択した状態で :GitBrowseRemote すると、その範囲を選択した URL をブラウザで開いてくれます。また、--rev オプションを指定することで、ブランチではなく SHA1 によって URL を構成します。他人に共有するときはこのように、後から見ても内容の変わらない URL にしておくのが便利ですよね。

GitHub のリポジトリの description/website をワークスペースから更新する

f:id:motemen:20140603191822p:plain

☝ この部分です。新しいリポジトリを作ったとき、ここの空欄が主張してきてちょっと気になりますよね。かといってブラウザでいちいち入力するのもだるい。エディタで書きたい。

ところで .git/description ってファイルを見たことありますか? ものの本には

the description file is only used by the GitWeb program, so don’t worry about those. Git - Plumbing and Porcelain

とあります。中身はこんなの。

% cat .git/description 
Unnamed repository; edit this file 'description' to name the repository.

ずっとこの内容のまま更新されることもないだろうファイルです。なのでこいつを GitHubリポジトリ情報のためのファイルとして使ってやろうって話です。

motemen/git-hub-sync-repo-info · GitHub

この簡単なスクリプトで、GitHubリポジトリ情報(description および website)とローカルのファイル(.git/description および .git/homepage)とを同期させることができます。API では homepage というキーになってるので URL が格納されるのは .git/homepage です。これらのファイルはもちろんバージョン管理されないファイルです。ファイルの内容が空かデフォルトのままの場合はリモートの情報がファイルに格納され、それ以外の場合はファイルの内容が GitHub の側に反映されます。

% echo "Synchronize .git/description and .git/homepage files with GitHub repository's info" > .git/description 
% git hub-sync-repo-info
# description:
#   local  = Synchronize .git/description and .git/homepage files with GitHub repository's info
#   remote = 
# homepage:
#   local  = 
#   remote = http://www.example.com/
Updated .git/homepage: [http://www.example.com/]
Updated remote description: [Synchronize .git/description and .git/homepage files with GitHub repository's info]

GitHubAPI トークンを設定しない場合は GitHub の更新ができません。個人用のトークンを作成してgit config --global hub-sync-repo-info.token TOKEN で設定してください。

簡単ですね。どうぞご利用ください。

ghq: リモートリポジトリのローカルクローンをシンプルに管理する

以前紹介したghqというツールGitHubリポジトリを手元に簡単クローンしてたのを、環境が新しくなったついでに Go で書き直し、完全リニューアルしました。(前は zsh だったのでなんだかなーと思ってた。)

そもそも何をするツール

GitHubGoogle Code Project でホストされている Git、Mercurialリポジトリを手元にクローンすることができます。リポジトリは設定したルート(デフォルトで ~/.ghq)以下に、以下のようなパスで置かれます。

~/.ghq/github.com/motemen/ghq

go get と似てますね。同じような感じで ghq get <URL> します。

% ghq get https://github.com/motemen/ghq
     clone https://github.com/motemen/ghq -> /Users/motemen/.ghq/github.com/motemen/ghq
       git clone https://github.com/motemen/ghq /Users/motemen/.ghq/github.com/motemen/ghq
Cloning into '/Users/motemen/.ghq/github.com/motemen/ghq'...
remote: Reusing existing pack: 269, done.
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 285 (delta 7), reused 0 (delta 0)
Receiving objects: 100% (285/285), 52.52 KiB, done.
Resolving deltas: 100% (156/156), done.

また、手元のリポジトリを一覧したり、

% ghq list go # "go" を含むリポジトリを検索
github.com/google/go-github
github.com/google/vroom
github.com/googleads/googleads-adsense-examples
code.google.com/p/go.text
code.google.com/p/go.tools

特定のリポジトリルートに移動(cd してシェルを起動)したりすることができます。

% ghq look vim
        cd /Users/motemen/.ghq/code.google.com/p/vim
% # cd した上で新しいシェルが起動する

便利ですね。

インストール

go get github.com/motemen/ghq

後述の Pocket 連携を有効にしてビルドしたい場合は、API キーを指定してビルドする必要があります。

go get -ldflags "-X github.com/motemen/ghq/pocket.ConsumerKey <your Pocket consumer key>" github.com/motemen/ghq

設定

設定は git config を通じて読み込まれるので、~/.gitconfig に書いてください。

ghq.root: 唯一の設定項目です。このルートディレクトリ以下に、リポジトリの URL に基づいたパスでローカルクローンが作られます。デフォルトで ~/.ghq なのでいい感じに設定してください。これは複数設定することもできて、その場合、新しいリポジトリのクローンは最初の設定値の配下に行われます。

自分の場合は以下のようにして、Go 言語のソースだけは go get で 取得し $GOPATH/src 以下に($GOPATH~/.go になってる)、そうでないものは ghq get~/.ghq 以下に取得するようにしています。

# ~/.gitconfig
[ghq]
    root = ~/.ghq
    root = ~/.go/src

一覧するときは両方のディレクトリが使用されます。

% ghq list --full-path
/Users/motemen/.ghq/code.google.com/p/vim
/Users/motemen/.ghq/github.com/motemen/git-browse-remote
/Users/motemen/.go/src/github.com/BurntSushi/toml
/Users/motemen/.go/src/github.com/motemen/ghq

インポート

おもしろ機能です。ローカルにクローンするリポジトリの一覧を、GitHub または Pocket から取得します。

GitHub から

特定のユーザがスターをつけたリポジトリを一気にクローンします。認証とかは不要。

% ghq import starred motemen

Pocket から

Pocket に追加した github.com の URL を探してきて、リポジトリっぽいものをクローンしてきます。

上に書いたとおり、Pocket のコンシューマーキーつきでビルドする必要があります。最初の一回は OAuth 認証のためブラウザを起動してアクセスする必要があります。

% ghq import pocket

どうぞご利用ください

zsh 用の補完もあります。Issue・PR お待ちしております。

2014-06-27 追記

おかげさまで、いろいろな方に紹介してもらってます。

motemen/ghq · GitHub

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