ブログのソース管理と git submodule deinit

ソースも git で管理したかった

$ hexo deploy -g するとページを生成しつつ公開用に push してくれるが、生成元の markdown ファイルや _config.yaml も git で管理したかった。

というより、ローカルに置いといても無くしちゃうので管理する必要があった。

で、この記事 の最後の段落、「hexo をリポジトリ管理」がまさにやりたいことだったので参考にしてさっそくやってみたのだけれど…。

init できない

まず、ブログのソースのあるディレクトリで $ git init がうまくいかない。

1
2
$ git init
Reinitialized existing Git repository in {パスはいる}

init した覚えないのに…と思いつつ確認してみると、 .gitignore があったので中身を確認してみる。

1
2
3
4
5
6
7
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/

なるほど、これは hexo をインストールした時点で用意してくれていたようだ。

git が入れ子状態

では、ということで add して commit したが、どうもうまくいかない…。

1
2
3
4
5
6
$ git commit
On branch master
Changes not staged for commit:
modified: themes/apollo (modified content)
no changes added to commit

どうも、テーマファイルを追加した際に git clone したので、 git の管理が入れ子になっちゃってるみたいだった。

↓こんな感じ

1
2
3
4
5
6
7
8
9
10
11
.
├── .git # 親
├── .gitignore
├── _config.yml
(略)
└── themes
├── apollo
│ ├── .git # 子
│ (略)
│ └── _config.yaml # 子を clone 後に編集した
└── landscape

とりあえず親ディレクトリから ./themes/apollo/_config.yaml を add してみるが失敗。

1
2
$ git add ./themes/apollo/_config.yml
fatal: Pathspec './themes/apollo/_config.yml' is in submodule 'themes/apollo'

仕方ないので子ディレクトリ上で変更差分を commit する。
これは普通にできた。

submodule のキャッシュをクリア

submodule の設定なんてした覚えがないけれど、たぶんそういうことになっちゃってるぽいので試しに親ディレクトリで submodule update してみるがこれもなんかおかしい。

1
2
$ git submodule update
No submodule mapping found in .gitmodules for path 'themes/apollo'

検索しやすそうなエラーなのですぐに解決策がありそうな、 それっぽい記事 が見つかった。
どうやら submodule のキャッシュを捨てれば良さそうだ。

1
2
3
4
$ git rm --cached themes/apollo/
$ git add themes/apollo/
$ git submodule deinit themes/apollo/
$ git status

うまくいった!!

このあと、あらためて $ git remote add などをすませて無事に当初の目的を果たした。
(ブログ公開用リポジトリに、別ブランチでソースを push できた)
やれやれ。