LoginSignup
51
22

More than 1 year has passed since last update.

githubでフォルダに矢印が!やっと解決した話 

Last updated at Posted at 2021-09-14

githubでフォルダに矢印が出てやっと解決した話

はじめに、この画像をご覧ください。
矢印フォルダ.png
section4フォルダに矢印がついています。何これ?
で、中身はというと、、、
矢印フォルダの中身.png
あれ???
理想は、こんなイメージにしたかった。
結果3.png
フォルダが綺麗に並んでいるイメージだったのに、何か違う。。。
※矢印フォルダの中に、さらに同じような矢印フォルダの場合もあります。
実際のエディタでは、フォルダ(ファイル)があるんだけどな、、、
実際の中身.png

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(矢印付きフォルダ)」だけフォルダ以下のファイルがリポジトリ管理になっていません!
リポジトリ管理一覧.png

つまり、先ほどの、"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で確認してみると、
gitstatus.png
あらたに、section4フォルダ以下、更新に違いが確認できました。

$ git add -A
gitstatus2.png これで、section4の中のファイルが全部監視対象になったので、
$ git commit -m"メッセージ"
$ git push

section4フォルダの矢印が消えました!
結果1.png
section4の中
結果2.png
/section4/nuxt-routing/ファイル のパス通りになっています!
結果3.png

以上です。

補足・参考

その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の(矢印付き)フォルダを削除したい人は以下が参考になります。

【GitLab】リモートリポジトリのフォルダが削除されない

51
22
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
51
22