67
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Git リポジトリの中で別のリポジトリを管理する submodule

Posted at

Git を使っていると、自分で作ったリポジトリの中で、別のリポジトリを入れたい時があるかと思います。

僕の場合は、Vim の設定ファイルやプラグイン管理用にディレクトリを作って、 GitHub で管理しようと思った時に、プラグインに関しては、外部のリポジトリと同期させる必要がありました。

が、例えば、hogeっていうリポジトリがあるとして、その中で、fugaっていうリポジトリを外部から$ git cloneしてきた場合hoge$git pushしても、fugaの中身はpushされません。

困ったなーって思ってたら見つけたのが submodule という機能!

具体的には、リポジトリ内の外部リポジトリを取り込みたいディレクトリで、
$ git submodule add [外部リポジトリ] [ローカルで格納したいディレクトリ]
すれば、サブモジュールが作成できます。

ポイントとしては、サブモジュールの中と外は連動しておらず、外側から見るとサブモジュールは、外部リポジトリが入っている箱でしかないという点です。

なので、サブモジュールを更新したり別のブランチを使ったりしたい場合は、サブモジュールの中に入って、git 操作を行います。

ちなみに、別のマシンでhoge$ git pullする場合、それだけではfugaの中身は引っ張ってこれません。
fugaの中身を引っ張ってくるには、pull した後に、$ git submodule initして、$ git submodule updateするとfugaが参照してるリポジトリからクローンされます。

ここで、自分の場合は、No submodule mapping found in .gitmodules for path 〜というエラーが出て最初はうまく行かなかったのですが、原因はサブモジュールを管理する.gitmodulesというファイルの中での記述に問題があったからのようでした。

.gitmodulesの中には、サブモジュールへのパスや、参照しているリポジトリの情報が書いてあるのですが、そのパスが、フルパスだと何故か認識されておらず相対パスに書き換えるとうまく行きました。

ということで、今回の参考ブログは以下!
Git submodule の基礎 | Qiita / sotarok
git submodule ではまった | ryusunslifestyle

67
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?