# 背景
submoduleのthemes/配下のstatic/imgを編集したが、pushの仕方がわからない
submoduleディレクトリにてgit commitまでやって、それからがわからなかった
→ git submodule ブランチ,変更手順 Hugo-Netfily ブログ構築
そのままメインプロジェクトを変更したのでpushしてデプロイかける→エラー
サブモジュールパス 'themes / hugo-dpsg'にフェッチされましたが、b48b8487235ae24d1832bec2de194bc15cd3da08が含まれていませんでした。そのコミットの直接フェッチは失敗しました。
ここでリモート、ローカルで、submoduleのコミットIDに違いがでたこと認識した
→色々と調べるも、解決方法がわからない、参考記事を理解することが困難だった
→試行錯誤するも、解決に至らず。
Netlifyでsubmoduleのcloneに失敗する時
https://qiita.com/naokazuterada/items/7ecf8a3dcaa6c4b5313c
git submoduleを更新してpushを忘れてしまった時
https://qiita.com/kaityo256/items/c269b8f2cc47b4799e9f
らちがあかないので、submoduleを思い切って消す方法を試そうと考える
hugoのソースツリーやシステムはシンプルそうだし、編集もちょっとしかしてないから、もし編集が飛んでも大丈夫と思ったし、事例記事もいくつか見つかった
//作業ディレクトリ:メインプロジェクトトップStaticSiteGeneratorBlog
//submoduleディレクトリthemes/を削除
% git submodule deinit -f -- themes/hugo-dpsg
//結果
Cleared directory 'themes/hugo-dpsg'
warning: Could not unset core.worktree setting in submodule 'themes/hugo-dpsg'
※空のthemesディレクトリをエディタで削除したらgit statusでディレクトリ削除を認識しました
//メインプロジェクト直下の設定ファイル.gitmodulesを削除
%git rm -f .gitmodules
//結果
rm '.gitmodules'
//削除をプッシュする
//ステージング
%git add .
%git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: .gitmodules
deleted: themes/hugo-dpsg
//コミット
%git commit -m "Del: delete submodule"
//リモートorigin/masterにプッシュ
%git push origin HEAD
テーマとして使いたい公開テーマリポジトリを対象にsubmoduleを実行
//作業ディレクトリ:メインプロジェクトトップStaticSiteGeneratorBlog
//submodule追加
%git submodule add git@github.com:pfadfinder-konstanz/hugo-dpsg.git themes/hugo-dpsg
//結果
//既に存在すると怒られる
'themes/hugo-dpsg' already exists and is not a valid git repo
//何度か繰り返すとメッセージが...
'themes / hugo-dpsg'のgitディレクトリは、リモートでローカルに見つかります:
オリジンhttps://github.com/pfadfinder-konstanz/hugo-dpsg.git
から再度クローンを作成する代わりに、このローカルgitディレクトリを再利用する場合
git@github.com:pfadfinder-konstanz / hugo-dpsg.git
'--force'オプションを使用します。 ローカルのgitディレクトリが正しいリポジトリではない場合
または、これが何を意味するのかわからない場合は、「-name」オプションを使用して別の名前を選択してください。
//やりたいことは、ローカルからのクローンではないので、-nameオプションが避けて通れないようだ
//管理で混乱しそうだからわかりやすい命名にしよう redo=やりなおしの意
%git submodule add --name redo2 git@github.com:pfadfinder-konstanz/hugo-dpsg.git themes/hugo-dpsg
//結果
Cloning into '/Users/user/StaticSiteGeneratorBlog/themes/hugo-dpsg'...
remote: Enumerating objects: 319, done.
remote: Counting objects: 100% (319/319), done.
remote: Compressing objects: 100% (189/189), done.
remote: Total 319 (delta 126), reused 297 (delta 104), pack-reused 0
Receiving objects: 100% (319/319), 1.35 MiB | 1.36 MiB/s, done.
Resolving deltas: 100% (126/126), done.
//コミットID確認
%git submodule status
//結果
658ad13e0b046e3cb53eaa6dcf8338c007262f19 themes/hugo-dpsg (heads/master)
//submoduleを入れ直した変更をプッシュ
//ステージング
%git add .
%git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitmodules
new file: themes/hugo-dpsg
//コミット コミットメッセージは後で見てわかるように、あえてコマンドを丸っとコピペした
%git commit -m "Add: %git submodule add --name redo2 git@github.com:pfadfinder-konstanz/hugo-dpsg.git themes/hugo-dpsg"
//結果
[master 1af810e] Add: %git submodule add --name redo git@github.com:pfadfinder-konstanz/hugo-dpsg.git themes/hugo-dpsg
2 files changed, 4 insertions(+)
create mode 100644 .gitmodules
create mode 160000 themes/hugo-dpsg
//プッシュ
%git push origin HEAD
//結果
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 513 bytes | 513.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/Sakagami-Keisuke/ssg_blog
d807030..8f09d6e HEAD -> master
submoduleテーマの削除と入れ直しができたので、ビルドしてデプロイ
//作業ディレクトリ:メインプロジェクトトップStaticSiteGeneratorBlog
//ビルド
%hugo
//結果
Start building sites …
| JA-JP
-------------------+--------
Pages | 27
Paginator pages | 0
Non-page files | 0
Static files | 28
Processed images | 0
Aliases | 12
Sitemaps | 1
Cleaned | 0
//ビルトインウェブサーバーで確認
%hugo -D
//netfilyでデプロイかけたらエラー submoduleのURLがおかしい(git submodule addの段階でミスってるのか)
// .submoduleを修正する
[submodule "redo"]
path = themes/hugo-dpsg
//# url = git@github.com:pfadfinder-konstanz/hugo-dpsg.git (←デフォ)
url = git://github.com/pfadfinder-konstanz/hugo-dpsg.git (←修正)
%git add .
%git commit -m ".gitmodules url修正"
//結果
[master fd91042] .gitmodules url修正
1 file changed, 2 insertions(+), 1 deletion(-)
//プッシュ
%git push origin HEAD
// 結果
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 398 bytes | 398.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/Sakagami-Keisuke/ssg_blog
ff11c1f..fd91042 HEAD -> master
Netfilyデプロイ
submoduleの管理方法にまだ理解不足があるものの、デプロイ復帰できてよかった!
submoduleのおさらい
submoduleのブランチと、メインのブランチはちがうもの
- submoduleディレクトリでブランチを切ってから作業する
メインディレクトリのブランチと、submoduleのブランチは別物で、別にブランチ管理するもの
もし失敗した時はcheckoutしてmasterに戻れる
//StaticSiteGeneratorBlog/themes/hugo-dpsg
//Hugoディレクトリ(mainproject:親)/themes/hugo-dpsg(submodule:子)
//submoduleディレクトリでtestブランチを作成
hugo-dpsg%git branch test
hugo-dpsg%git branch
* master
test
//移動
hugo-dpsg%cd ..
themes%cd ..
//mainディレクトリでブランチを確認
StaticSiteGeneratorBlog%git branch
//testブランチがない=ブランチ管理が別物である
* master
//逆をやってみる mainでtest2ブランチを作成
StaticSiteGeneratorBlog%git branch
* master
test2
//移動
StaticSiteGeneratorBlog%cd themes/hugo-dpsg
//submoduleのブランチを確認 test2ブランチがない
hugo-dpsg%git branch
* master
test
つまり、mainとsubmoduleは同じソースツリーにいながら、別々のリポジトリである
コミットIDで紐づいていることを確認する
//main側でsubmoduleの紐づくコミットIDを確認
StaticSiteGeneratorBlog%git submodule
//結果 submoduleであるthemes/hugo-dpsgのmasterブランチで表示コミットIDで紐づく
658ad13e0b046e3cb53eaa6dcf8338c007262f19 themes/hugo-dpsg (heads/master)
//submodule側のコミットIDをしらべると一致している
hugo-dpsg%git show
commit 658ad13e0b046e3cb53eaa6dcf8338c007262f19 (HEAD -> master, origin/master, origin/HEAD)
参考になった記事
Git submodule の基礎
https://qiita.com/sotarok/items/0d525e568a6088f6f6bb
Git submoduleの押さえておきたい理解ポイントのまとめ
https://qiita.com/kinpira/items/3309eb2e5a9a422199e9
Git Submodule内の変更をプッシュする手順
https://qiita.com/masarufuruya/items/9938c46fe75dac40f798
git submoduleを更新してpushを忘れてしまった時
https://qiita.com/kaityo256/items/c269b8f2cc47b4799e9f
Netlifyでsubmoduleのcloneに失敗する時
https://qiita.com/naokazuterada/items/7ecf8a3dcaa6c4b5313c
git submoduleを再作成する時の注意
https://qiita.com/ymdymd/items/7d4a53f329fc083e1100
サブモジュールを削除するにはどうすればよいですか?
https://qastack.jp/programming/1260748/how-do-i-remove-a-submodule
git submoduleを簡潔に理解して使う
https://unicorn.limited/jp/rd/git/20160609-git-submodule.html