rcmdnk's blog

実用Git

GitのレポジトリにSubmoduleを追加する場合、 ssh([email protected]みたいな)やhttpsなどのどのプロトコルを使うかは 通常最初に追加した時に使ったものになります。

これを後から変更する方法について。

Sponsored Links

Submoduleのプロトコルの変更

Submoduleの情報はレポジトリトップの.gitmodulesというファイルに

.gitmodules
1
2
3
[submodule ".themes/octogray"]
  path = .themes/octogray
  url = [email protected]:rcmdnk/octogray.git

みたいな感じで登録されてます。

レポジトリを取ってきて最初にサブモジュールを取ってくる時にはこの情報を使って取ってきます。

実際に取ってくると、今度は.git/configのレポジトリの設定ファイルの中に

.git/config
1
2
[submodule ".themes/octogray"]
  url = [email protected]:rcmdnk/octogray.git

こんな感じで登録されます。

これを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に戻しておく、ということも出来ます。

Sponsored Links
Sponsored Links