GitのレポジトリにSubmoduleを追加する場合、 ssh(git@…みたいな)やhttpsなどのどのプロトコルを使うかは 通常最初に追加した時に使ったものになります。
これを後から変更する方法について。
Submoduleのプロトコルの変更
Submoduleの情報はレポジトリトップの.gitmodulesというファイルに
1 2 3 |
|
みたいな感じで登録されてます。
レポジトリを取ってきて最初にサブモジュールを取ってくる時にはこの情報を使って取ってきます。
実際に取ってくると、今度は.git/configのレポジトリの設定ファイルの中に
1 2 |
|
こんな感じで登録されます。
これをhttpsに変更したい場合は.gitmodulesの中のurlを変更してあげればOK。 コマンドなら
$ git config -f .gitmodules submodule..themes/octogray.url https://github.com/rcmdnk/octogray.git
または、直接.gitmodulesを開いて[email protected]:
https://github.com/
の
変更を行います。
これで.gitmodulesをコミットすれば次にこのレポジトリをクローンしてきて
サブモジュールを追加する際にhttps
が使われる様になります。
ただし、この変更だけだと既にローカルにあるレポジトリはsshの設定のままです。
これを変更するには上の.gitmodulesの変更後、
$ git submodule sync
というコマンドを使います。これで .git/configの内容が.gitmodulesに沿って書き換えられます。 (.git/configを直接変更しても出来ますが、この場合はコマンドを使ったほうが安全、かつ楽。)
チェックしてみると
$ cd .themes/octogray
$ git remote -v
origin [email protected]:rcmdnk/octogray (fetch)
origin [email protected]:rcmdnk/octogray (push)
$ cd -
$ git config -f .gitmodules submodule..themes/octogray.url https://github.com/rcmdnk/octogray.git
$ cd .themes/octogray
$ git remote -v
origin [email protected]:rcmdnk/octogray (fetch)
origin [email protected]:rcmdnk/octogray (push)
$ cd -
$ git submodule sync
$ cd .themes/octogray
$ git remote -v
origin https://github.com/rcmdnk/octogray (fetch)
origin https://github.com/rcmdnk/octogray (push)
な感じです。
ローカルで作業してる限りでは .gitmodulesと.git/configに登録されてる設定が別でも特に問題はありません。
他の人にも公開する様なレポジトリだと、 sshのプロトコルを使えなかったりする場合もあるので httpsを使っておいた方が無難です。
一方、GitHubのレポジトリで作業とかしている時、
サブモジュールも自分のレポジトリでそれを直接編集してリモートに反映したりしたい時、
sshのプロトコルを使った方がpush
とかするのに都合が良かったりします。
この場合、.gitmodulesの中ではhttpsで登録しておいて、
サブモジュールを一旦取得したら
.git/configのサブモジュールの項目を
https://github.com/
[email protected]:
の様に変更します。
もしくは.gitmodulesをhttpsで書き換えてsync
で.gitmodulesの情報を.git/configに送り、
再び.gitmodulesは元のhttpsに戻しておく、ということも出来ます。