0
0

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の話(cloneしたら有るはずのものが無い空っぽのディレクトリが… etc)

Last updated at Posted at 2019-03-18

個人的備忘録です。

git submodule とは

乱暴に言うと、あるリポジトリのサブディレクトリ配下に 別のリポジトリ(プロジェクト) を取り込み、そのまま管理するというもの。

どこで使うの

たとえば static site generator である Hugo でテーマ(スキン)。
テーマそれぞれが git リポジトリになっていて、それを hugo の site配下で themes/ の下に持ってくる必要がある。

$ cd themes
$ git clone テーマ.git

一見これでも問題はない。でも、たとえば netlify を使うことになると、このhugoのsite以下をgitで管理する必要が出てくる。じゃあ、その中にあるthemesにどうやって持ってくるのか? そこでsubmoduleの出番になってくる。

小さな落とし穴

$ git submodule add サブモジュールとしてチェックアウトしたいなんとか.git

こうすると、とりあえずうまくいく。ファイルもばっちり取り出されている。これを、git addしてcommitしてpushして...

別のマシンなり環境なりで、この全体を git clone する。と、サブモジュールとしたディレクトリ配下が空っぽである。
あれ!?pushしたんじゃなかったの?

対策

のちに取り出した方の環境ではサブモジュールが有効になっておらず取り出せてもいない。詳細は割愛する。(.gitmodulesとかなんとか調べてください)

$ git submodule init
$ git submodule update

とするか、そもそも

$ git clone --recursive 自分のリポジトリ

とすれば良い。

余談

netlify で hugo なサイトを回している感じでは、clone --recursive されているようだ。実際チュートリアルにも submodule でやれよみたいなこと書いてあるし。

余談2

git submodule 「なにがどうなっているのか」を完全に理解しない限り奇妙に見える(たとえばcommit idに紐付いているとか) が、使う分にはすこぶる快適なのでオススメ

参照

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?