GitのレポジトリをcloneしたいときはもっぱらGitHubにあるもので、 自分のものも殆どGitHubにあるので、 毎回ちょっとcloneしたいときに[email protected]:とかをuser/repository の前に付けるのはちょっと面倒です。
なので、適当なラッパー関数でも書くかな、とか思っていたら すでにGitHubのレポジトリ に結構立派なのがあったのでそれを試してみました。
hub
hub · the command-line wrapper for git
git + hub = github、とのこと。
gitコマンドをラップしてGitHub用に色々使いやすくしてくれるコマンドです。
Setup
MacならHomebrewで
$ brew install hub
とするなり、で入れられますし、 sourceを取ってきて直接入れる簡単な方法もレポジトリのREADMEにあります。
hub
はgit
コマンドのラッパーコマンドになっていて、
基本的にはgit
と全く同じ様に使えます。
(ちょっと甘みを加えるだけ。)
なので、~/.bashrc
なんかで
if type hub >& /dev/null;then
alias git=hub
fi
とでも書いておきます 1
これで次回ログイン時からはgit
がhub
に置き換わります。
すぐに使いたいならsource
。
hubコマンドの使い方
色々出来る様になりますが、 特に便利だな、と思うものを挙げてみました。
後のものはREADMEに詳しいのでそちらを。
以下ではhub
コマンドがgit
にaliasされてるとしてgit
コマンドと書いています。
名前を省略してcloneする
git
にエイリアスをしたら通常の作業では通常通りgit
コマンドが使えますが、
clone
する際、自分のGitHubのレポジトリの場合は
レポジトリ名だけを書けばOKになります。
$ git clone sentaku
で[email protected]:rcmdnk/sentaku.git
の様にsshを使ったgithub.comの自分のアカウント名下からのclone
になります。
この際、最初のcloneコマンド時に、hub
によって
GitHubのアカウント名とパスワードを聞かれます。
(2段階認証にしていればパスワード後に認証キーも聞かれます。)
それらの情報は~/.config/hubに保存されます。 ただし、パスワードの方はそのまま保存されるのではなく OAuthトークンが保存されています。
一度登録すれば次回からはやらなくてOK。
もし、cloneする対象がgithub/hubみたいな スラッシュを含むユーザー名を含んだものの場合は git://github.com/github/hub.git といったgitプロトコルのclone元になります。
また、他人のところでも
$ git clone -p github/hub
とするとsshを使った[email protected]:github/hubになります。
省略してしてremote add
REPOSITORYというレポジトリ内で
$ git remote add others
とすれば
$ git remote add others git://github.com/others/REPOSITORY.git
と同じ結果に。
現在のレポジトリをブラウザに表示
$ git browse
とすると現在のレポジトリのGitHub上のページhttps://github.com/user/repo をブラウザに表示してくれます。
git browse
に対して第一引数を渡すと、
/
が含まれているとhttps://github.com/直下に続いて加えられる。git browse settings/profile
ならhttps://github.com/settings/profile
/
が含まれてないとhttps://github.com/userに続いて加えられる。git browse sentaku
ならhttps://github.com/rcmdnk/sentaku
第二引数を与えると上のURLに引き続いて加えられます。 Pull Requestsを見たい場合には
$ git browse sentaku pulls
的な。
特定のブランチを表示させたいときは
$ git browse sentaku tree/master
と、tree
に引き続いてブランチ名。
tree/master/bin
とすればmasterブランチのbinディレクトリを開きます。
ただし、ファイルを直接開きたい場合には、最初がtree
ではなく、blob
にする必要があります。
$ git browse sentaku blob/master/bin/sentaku
第三引数を与えると何故か今いるディレクトリ下のファイルを探しに言ってそれを 開こうとします(意図的なのかここまで使うことを想定してなかった上でのバグなのか)。
また、特定のレポジトリの下にいるときに最初に--
を与えて
その後に引数を与えると、
現在居るレポジトリ以下に対して上の第二引数的にディレクトリを追加してくれます。
$ git browse -- issues
とすれば、現在のディレクトリのレポジトリのIssuesを開きます。
fork
他の人のレポジトリをcloneしてきてそのレポジトリ内で
$ git fork
とするだけでGitHub上でforkが行われ、
さらに現在のローカルにそのforkした自分のレポジトリがremote add
されます。
GitHub Enterpriseを使っている場合
$ git config --global --add hub.host my.example.org
とするとgithub.comの代わりにmy.example.orgを使う様にできる、とのこと。
一時的に使いたい場合は
$ GITHUB_HOST git clone repo
GitHub以外で使うことは今のところ出来ない
Bitbucketとかでも使えないのかな、と思ったんですが、 APIの関係とかで素直にそのまま使えないので今のところ対応してない模様。
認証の部分とアカウント名の辺りをちょっとなんとかする必要がありそう。
-
無駄に
eval "$(hub alias -s)"
というコマンドでもaliasを作るコマンド(結局上のただのgit=hub) を作るのでそれを、とも書いてあります。
通常は全く同じですが、 もしかしたら何か変わるかもしれないということで 素直に従って
eval
コマンドを書いておいた方が良いかも。