rcmdnk's blog

The Wrapper

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にあります。

hubgitコマンドのラッパーコマンドになっていて、 基本的にはgitと全く同じ様に使えます。 (ちょっと甘みを加えるだけ。)

なので、~/.bashrcなんかで

if type hub >& /dev/null;then
  alias git=hub
fi

とでも書いておきます 1

これで次回ログイン時からはgithubに置き換わります。 すぐに使いたいなら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の関係とかで素直にそのまま使えないので今のところ対応してない模様。

bitbucket support · Issue #140 · github/hub

認証の部分とアカウント名の辺りをちょっとなんとかする必要がありそう。

Sponsored Links
  1. 無駄に

    eval "$(hub alias -s)"
    

    というコマンドでもaliasを作るコマンド(結局上のただのgit=hub) を作るのでそれを、とも書いてあります。

    通常は全く同じですが、 もしかしたら何か変わるかもしれないということで 素直に従ってevalコマンドを書いておいた方が良いかも。

Sponsored Links

« Androidスマホでの3つのテザリングの仕方。設定のやり方や速度を比較等。 sshでConnection reset by peerと接続が切れるのを防ぐ »

}