ghqを使ったローカルリポジトリの統一的・効率的な管理について - delirious thoughts を参考にして、 go と ghq で同じディレクトリを使っていたのですが、 go で自動で追加ダウンロードされたものと 自分でダウンロードしたものが混ざるとわかりにくいと思ったので、 分けることにしました。

対象バージョン

  • go version go1.3 darwin/amd64
  • git verseion 2.0.0
  • Mercurial Distributed SCM (version 3.0.1)
  • ghq version HEAD (2014-06-27 が最新コミットの状態)

go などのインストール

Homebrew を使って brew install go --cross-compile-common でインストールしました。

git と mercurial もインストールしておきました。

シェルの設定 (GOPATH など)

bash と zsh の共通の設定として 50gopath.sh で以下のように設定しています。

統合している時は go とか git とかの意味をかねて g だけにしていましたが、 今は go 専用にしています。

    if [ -z "${GOPATH:-}" ]; then
        export GOPATH=$HOME/g
        PATH=$PATH:$GOPATH/bin
    fi

その後に zsh 専用の追加設定で 50gopath.zsh で以下のように設定しています。

GOPATH が PATH のように : 区切りで複数になる可能性を考慮してしまったのですが、 The GOPATH environment variable をみるとそういうことはなさそうなので、 ${^${(s/:/)GOPATH}} は単純に ${GOPATH} でも良さそうです。

そして fpath に _ghq のパスを追加して ghq の引数を補完できるようにしています。

    path=( $path ${^${(s/:/)GOPATH}}/bin(N) )
    fpath=( $fpath ${^${(s/:/)GOPATH}}/src/*/*/ghq/zsh(N) )

ghq のインストール

go get -v github.com/motemen/ghq でインストールしました。

https:// の要不要

ghq get では github.com から書く時は https:// が必須なのですが、 こちらは https:// は不要というか、 むしろ付けるとエラーになりました。

.gitconfig の設定

git-config.shuser.nameuser.email 以外の共通のものはまとめて設定しています。

コマンドでの設定の追加削除

詳細はドキュメントをみてもらうとして、まとめておくと以下のようになります。

  • 単独の設定 : git config --global section.key value
  • 複数設定 : git config --global section.key value の後で git config --global --add section.key value
  • 複数設定削除 : git config --global --unset-all section.key (ただしセクションが空になっても残る)
  • セクションごと削除 : git config --global --remove-section セクション

ghq の設定

ghq.root--unset-all だけすると git-config.sh を実行する度に ghq セクション、つまり [ghq] の行が増えていってしまったので、 --remove-section を使いました。 他に ghq セクションに設定を入れていたら、 それも消えてしまうので注意してください。

    # ghq section
    git config --global --remove-section "ghq" || :
    GHQ_ROOT="ghq.root"
    #git config --global --unset-all "$GHQ_ROOT" || :
    git config --global "$GHQ_ROOT" "$HOME/s"
    git config --global --add "$GHQ_ROOT" "$HOME/g/src"

これで ghq get$HOME/s に入って ghq look では両方見えるようになりました。

github の URL 統一の話

github の URL は https に統一して、 gitconfig の設定で push は ssh プロトコル、 pull などは git プロトコル (昔は Git Read-Only と書いてあった URL) を使うようにしています。

    # github upload
    GITHUB_URL_PREFIX="url.git@github.com:"
    git config --global --remove-section "$GITHUB_URL_PREFIX" || :
    git config --global "$GITHUB_URL_PREFIX".pushInsteadOf "git://github.com/"
    git config --global --add "$GITHUB_URL_PREFIX".pushInsteadOf "https://github.com/"
    # gist upload
    git config --global "url.git@gist.github.com:".pushInsteadOf "https://gist.github.com/$(git config github.user)/"
    # github download
    git config --global url."git://github.com/".insteadOf "https://github.com/"

詳細は githubでhttpsのURLを指定してもgitプロトコルやssh経由にする方法 を参照してください。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published