要約すると url.<base>.insteadOfurl.<base>.pushInsteadOf を使えば良いという話です。 github 以外でも使えます。

設定例

自分では今のところ、以下の設定にしています。

最初の [url "git@github.com:"] のセクションは URL の指定として https:git: を使っていても git push のときには ssh 経由にする、 という意味になります。

次の [url "git://github.com/"] は、その他の git fetchgit pull の時は https: の代わりに git: を使うという意味になります。

[url "git@github.com:"]
	pushInsteadOf = git://github.com/
	pushInsteadOf = https://github.com/
[url "git://github.com/"]
	insteadOf = https://github.com/

pushInsteadOf なしの場合

pushInsteadOf を指定せずに insteadOf だけの場合は git push の時も insteadOf の設定が使われます。

例えば設定例とは逆に、 proxy を通さないといけないとかの理由で すべて https に統一したいのなら 以下のような設定になると思います。

[url "https://github.com/"]
	insteadOf = git@github.com:
	insteadOf = git://github.com/

コマンドでの設定方法

git config コマンド経由で pushInsteadOf を設定するなら、 以下のように指定します。

~/.gitconfiggithub.token などの秘密にすべき情報が入っていて 共有しにくい時にはコマンドで設定できた方が便利です。

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/"

設定確認方法

実際にどういう URL が使われるのかは git remote -v で確認できます。

.git/configremoteurl と見比べると ちゃんと設定が反映されていることがわかると思います。

$ git remote -v
origin	git://github.com/znz/rbenv-plug.git (fetch)
origin	git@github.com:znz/rbenv-plug.git (push)
$ cat .git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = false
[remote "origin"]
	url = https://github.com/znz/rbenv-plug.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

URL の選ばれ方

github の URL で説明していますが、 git の機能なので他の URL でも当然使えます。

URL は最初の部分だけ見て、最長一致するものが使われるようです。 git 1.8.4.3 の git config --helpWhen more than one insteadOf strings match a given URL, the longest match is used. と書いてあります。

まとめ

~/.gitconfig での記述例の話はよくあるのですが、 コマンドでの設定方法とか、 設定の確認方法を見かけたことがなかったので、 まとめてみました。

そして github 以外でも使えるという話も付け加えておきました。

2014-07-05 追記: GOPATHとghqの設定を変更した話とgitconfigのコマンドでの設定の話 に関連する話を書きました。

Disqus Comments

Kazuhiro NISHIYAMA

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

znz znz


Published