git submodule を削除して入れ直しエラー解決する　Hugo-Netlifyブログ構築

#　背景
## submoduleのthemes/配下のstatic/imgを編集したが、pushの仕方がわからない
submoduleディレクトリにてgit commitまでやって、それからがわからなかった

→　**[git submodule ブランチ,変更手順　Hugo-Netfily ブログ構築](https://qiita.com/SakagamiKeisuke/items/34c4e3acd240ca302bd2)**


## そのままメインプロジェクトを変更したので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のソースツリーやシステムはシンプルそうだし、編集もちょっとしかしてないから、もし編集が飛んでも大丈夫と思ったし、事例記事もいくつか見つかった

```Go:submoduleを削除していく
//作業ディレクトリ：メインプロジェクトトップ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を実行

```Go: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テーマの削除と入れ直しができたので、ビルドしてデプロイ

```PHP:ターミナル
//作業ディレクトリ：メインプロジェクトトップ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の管理方法にまだ理解不足があるものの、デプロイ復帰できてよかった！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/d851201e-4f5b-40d4-f8a2-b788f4cdd645.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617331/a4e5270a-efbe-3f55-67e8-329873c46e5f.png)


# submoduleのおさらい
## submoduleのブランチと、メインのブランチはちがうもの
- submoduleディレクトリでブランチを切ってから作業する
　メインディレクトリのブランチと、submoduleのブランチは別物で、別にブランチ管理するもの
　もし失敗した時はcheckoutしてmasterに戻れる

```Go:mainとsubmoduleでブランチが違うことをしらべる

//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で紐づいていることを確認する

```Go:ターミナル
//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