2
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 3 years have passed since last update.

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

Last updated at Posted at 2021-01-02

# 背景

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

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を実行

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.compfadfinder-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の管理方法にまだ理解不足があるものの、デプロイ復帰できてよかった!
image.png

image.png

submoduleのおさらい

submoduleのブランチと、メインのブランチはちがうもの

  • submoduleディレクトリでブランチを切ってから作業する
     メインディレクトリのブランチと、submoduleのブランチは別物で、別にブランチ管理するもの
     もし失敗した時はcheckoutしてmasterに戻れる
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で紐づいていることを確認する

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

2
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
2
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?