hnwの日記

gitが無くてもgit cloneするコマンドfakegitを作りました

最近は一段とGitHubが流行してきたように思います。多くのオープンソースプロジェクトがGitHubに移転するなど、いまやOSS開発者にとっては無くてはならない存在ですね。


ところで、GitHubにホストされているプロジェクトの中には、インストール方法として「git cloneしてね」などと書いてあるものがあります。確かに開発者の立場からはgit cloneが一番自然な方法かもしれませんが、ソフトウェアのユーザー全員がgitコマンドを用意しているとは限りません。


もし、こうした意識のズレがソフトウェアの普及を妨げているとすれば不幸なことです。この事態を解決するため、gitコマンドがなくてもGitHubからのgit cloneをエミュレートするbashスクリプトfakegit」を作ってみました。


fakegitは、指定されたGitHubリポジトリからのダウンロードをgit以外のコマンドで実現するものです。svnコマンドが利用できる場合はGitHubのSubversionサポートを利用してcheckoutします。svnも無い場合には、curlwgetを利用してプロジェクトのtarballを取得・展開します。

インストール方法

gitが無い環境であれば、次のように$HOME/bin以下にgitという名前でインストールするのがオススメです。

$ mkdir -p $HOME/bin
$ export PATH=$HOME/bin:$PATH
$ curl -L https://raw.github.com/hnw/fakegit/master/bin/fakegit > $HOME/bin/git
$ chmod a+x $HOME/bin/git
$ hash -r


これだけでGitHubからの「git clone」がどの環境でも動きます。普段から~/binを使っている場合は1,2行目は不要ですが、普段使っていない人は2行目を$HOME/.bash_profileに追加するのが良いでしょう。


gitはあるけどfakegitを試したい、という奇特な人はfakegitという名前でインストールしてください。

実行例

Spoon-Knifeプロジェクトを指定した場合の実行例を紹介します。

$ git clone git://github.com/octocat/Spoon-Knife.git
fakegit: Instaed of git, executing: svn checkout https://github.com/octocat/Spoon-Knife/trunk Spoon-Knife
A    Spoon-Knife/README
A    Spoon-Knife/forkit.gif
A    Spoon-Knife/index.html
Checked out revision 8.
$


svnでエミュレートした場合には「svn update」で更新に追随できるのも利点です。fakegitはpullなど他のサブコマンドをサポートしていませんので、checkout後はよしなにやってください。

利用シーン

滅多に使わない環境や複数人で共有する開発環境など、gitをインストールするのが精神的に面倒な環境ってあると思うんですよね。そうした環境でGitHub上のプロジェクトを利用したいなら、fakegitは便利だと思います。特に、インストールスクリプト内でgit cloneしているような場合には威力を発揮するでしょう。


僕の例で言えば、月に1回もログインしない某500円サーバにphpenvをインストールする、という状況が該当しました。phpenvのインストールスクリプトrbenvをgit cloneで取ってくるようになっているのですが、某500円サーバにはgitもsvnもありません。gitをインストールする気力もなかったので、bashスクリプトを書いたという次第です。


また、ハンズオン形式の勉強会などでGitHub上のプロジェクトを利用する場合(かつgitが本題ではない場合)にも便利かと思います。各自の環境がバラバラだと案外トラブルが出るものなので、「gitが手元にない人・うまくいかない人はこうしてください」と一律に説明ができるのはメリットだと思います。

さいごに

正直なところ、こんなニーズがあるのか無いのか想像がついていません。ご意見・ご感想・ごPull Requestをお待ちしております。