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

# githubでフォルダに矢印が出てやっと解決した話
はじめに、この画像をご覧ください。
<img width="400" alt="矢印フォルダ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/6806cd24-30a3-113b-07a5-39a89f62be95.png">
section4フォルダに矢印がついています。何これ？
で、中身はというと、、、
<img width="300" alt="矢印フォルダの中身.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/7f80f2e4-a9d0-3d42-44ad-434f5426ddb8.png">
あれ？？？
理想は、こんなイメージにしたかった。
<img width="300" alt="結果3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/7173f6d4-6688-872b-1012-342d264e7268.png">
フォルダが綺麗に並んでいるイメージだったのに、何か違う。。。
※矢印フォルダの中に、さらに同じような矢印フォルダの場合もあります。
実際のエディタでは、フォルダ（ファイル）があるんだけどな、、、
<img width="300" alt="実際の中身.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/db8bb945-9d09-ae3d-7ab4-b65edeb55ebe.png">
## teratailで同じ様に質問している人がいる
[gitでクローンしても矢印がついたフォルダだけ空になってしまうのですが、原因はなんなんでしょう？](https://teratail.com/questions/292465)
回答者1　「そのフォルダにファイルが入ってないだけなんでは」  ←"いやいや、入ってるし"
回答者2　「SubModuleでしょう。」  ←"へー、SubModuleっていうんだ”
質問者　「回答ありがとうございます。サブモジュール、、初めて聞きました。調べて色々試してみます！ 」　←”質問者の逃げパターンあるあるw、いやー、そのあとが知りたいのに。。。"
##別の記事にヒントがあった
[git add で fatal: Pathspec '/moge/hoge' is in submodule が出た時の対応
](https://qiita.com/tomoima525/items/91d6e1b0956b095ff909)
この記事が、ほぼ今回の解決の決定打だったので、この記事で勘がいい人は解決します。
## 試行錯誤
学習用だったので、特にブランチを切っていたわけではありませんでした。
そもそも、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（矢印付きフォルダ）」だけフォルダ以下のファイルがリポジトリ管理になっていません！**
<img width="400" alt="リポジトリ管理一覧.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/6a2422ff-c2c7-2ba0-57a0-e81d3b8ce6c4.png">

つまり、先ほどの、"teratailで同じ様に質問している人がいる"の所で、
>gitでクローンしても矢印がついたフォルダだけ空になってしまうのですが、原因はなんなんでしょう？
>回答者1　「そのフォルダにファイルが入ってないだけなんでは」 ←"いやいや、入ってるし"

**入ってなかった！！（管理されてなかった）なるほど！！**
回答者1の方、もう少し細かく説明して（ツッコんで）ほしかった。。。

## 解決方法
ここで、先ほどの記事で解決できます。
[git add で fatal: Pathspec '/moge/hoge' is in submodule が出た時の対応
](https://qiita.com/tomoima525/items/91d6e1b0956b095ff909)

（※監視から外すをググると「.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で確認してみると、
<img width="400" alt="gitstatus.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/cac60cb5-8c6c-7664-edb9-e67a8ef478bb.png">
あらたに、section4フォルダ以下、更新に違いが確認できました。

```
$ git add -A
```
<img width="400" alt="gitstatus2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/e73ced5b-6685-b7e8-8469-8e98fd2ec3b1.png">
これで、section4の中のファイルが全部監視対象になったので、

```
$ git commit -m"メッセージ"
$ git push
```
section4フォルダの矢印が消えました！
<img width="400" alt="結果1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/60ba2fd5-2720-6338-7d5a-472fda1d6111.png">
section4の中
<img width="300
" alt="結果2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/e45d1792-8dda-d3c4-fb68-420a74ff2b58.png">
/section4/nuxt-routing/ファイル　のパス通りになっています！
<img width="300" alt="結果3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769195/7173f6d4-6688-872b-1012-342d264e7268.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ディレクトリの中身を見てみる👀
](https://qiita.com/tatane616/items/dbad66179754be57d2e2)

その２）
別のワークスペースかディレクトリを作って、その中にgit cloneしてみてください。
githubの矢印付きフォルダは空だと思います。
そこで、githubの（矢印付き）フォルダを削除したい人は以下が参考になります。

[【GitLab】リモートリポジトリのフォルダが削除されない](https://teratail.com/questions/318032)