githubでフォルダに矢印が出てやっと解決した話
はじめに、この画像をご覧ください。
section4フォルダに矢印がついています。何これ?
で、中身はというと、、、
あれ???
理想は、こんなイメージにしたかった。
フォルダが綺麗に並んでいるイメージだったのに、何か違う。。。
※矢印フォルダの中に、さらに同じような矢印フォルダの場合もあります。
実際のエディタでは、フォルダ(ファイル)があるんだけどな、、、
teratailで同じ様に質問している人がいる
gitでクローンしても矢印がついたフォルダだけ空になってしまうのですが、原因はなんなんでしょう?
回答者1 「そのフォルダにファイルが入ってないだけなんでは」 ←"いやいや、入ってるし"
回答者2 「SubModuleでしょう。」 ←"へー、SubModuleっていうんだ”
質問者 「回答ありがとうございます。サブモジュール、、初めて聞きました。調べて色々試してみます! 」 ←”質問者の逃げパターンあるあるw、いやー、そのあとが知りたいのに。。。"
##別の記事にヒントがあった
git add で fatal: Pathspec '/moge/hoge' is in submodule が出た時の対応
この記事が、ほぼ今回の解決の決定打だったので、この記事で勘がいい人は解決します。
試行錯誤
学習用だったので、特にブランチを切っていたわけではありませんでした。
そもそも、pushしてファイルがアップされないのはなぜ??
①pushされない、つまり、リポジトリがちゃんと設定されていない??
//リポジトリが正しく設定されているか確認
$ git remote -v
ちゃんと指定されていたので違いました。
②ローカルとリモートがうまく紐づいてない??
// ローカルブランチ「main」を、リモートブランチ「main」に push
// git push origin {ローカルのブランチ}:{リモート先のブランチ}
$ git push origin main:main
ブランチ名の指定する引数に「:(コロン)」を用いれば、push 先となるリモートブランチを明示的に指定する事もできますが、違いました。
(自分は、リモートのデフォルトmasterとなるブランチをmainにしています)
③pushするまで
(1) add(ステージング) ← ココ ??
(2) commit(リポジトリに記録) ←違うっぽい
(3) push
##何のために $ git add するのか?
Git管理するために、$git addでステージングします。
(自分は単純にステージングするために$git addするとだけ認識していました)
$ git ls-files
$ git ls-files でリポジトリで管理しているファイルを一覧表示できます。
実際に、ターミナルで見てみると、「section4(矢印付きフォルダ)」だけフォルダ以下のファイルがリポジトリ管理になっていません!
つまり、先ほどの、"teratailで同じ様に質問している人がいる"の所で、
gitでクローンしても矢印がついたフォルダだけ空になってしまうのですが、原因はなんなんでしょう?
回答者1 「そのフォルダにファイルが入ってないだけなんでは」 ←"いやいや、入ってるし"
入ってなかった!!(管理されてなかった)なるほど!!
回答者1の方、もう少し細かく説明して(ツッコんで)ほしかった。。。
解決方法
ここで、先ほどの記事で解決できます。
git add で fatal: Pathspec '/moge/hoge' is in submodule が出た時の対応
(※監視から外すをググると「.gitignore」の説明ばかりにあたってしまいますが、今回は以下が解決方法です)
$ git rm -rf --cached <対象ファイル or path>
$ git add <対象ファイル or path>
// <対象ファイル or path>部分は、$git ls-files した時に表示されている部分。
// --cachedオプションを付けることにより、ファイルを残したまま管理対象から外すことができる。
自分の場合は、
$ git rm -rf --cached section4
//rm 'section4'となり、いったん追跡対象から外す。
$ git add section4/nuxt-routing/nuxt.config.js
$ git status
試しに、section4フォルダの一番深いファイルを監視対象にして、$ git statusで確認してみると、
あらたに、section4フォルダ以下、更新に違いが確認できました。
$ git add -A
$ git commit -m"メッセージ"
$ git push
section4フォルダの矢印が消えました!
section4の中
/section4/nuxt-routing/ファイル のパス通りになっています!
以上です。
補足・参考
その1)
上記でもうまくいかない場合、フォルダの最下層まで移動しましょう。
ls -a
を実行してみて「.git」ディレクトリがないか確認します。「.git」ディレクトリは、$git initした時に生成され、リポジトリに必要なすべてのファイルがその中に格納されます。サブディレクトリに「.git」ディレクトリが存在すると、上の階層から$git addしても管轄対処にできないので、追跡の対象にできません。
さらに、隠しディレクトリなので、ぱっと見わからないので、なぜ $git addが効かないのか分からない状況になります。
そのため、$ls -aで存在を確認します。もし、存在していたら、
rm -rf .git
を実行し削除します。
下から1つずつ階層を上がって「.git」ディレクトリが存在しないか確認し、一番上の最上位階層だけ「.git」ディレクトリを残したら、以下の階層は、$git addしても管轄対処にできるようになります。
「.git」ディレクトリの中身が気になる方は以下を参考にしてはどうでしょうか。
.gitディレクトリの中身を見てみる👀
その2)
別のワークスペースかディレクトリを作って、その中にgit cloneしてみてください。
githubの矢印付きフォルダは空だと思います。
そこで、githubの(矢印付き)フォルダを削除したい人は以下が参考になります。