【個人メモ】SourceTreeでUnityプロジェクト内のフォルダを.gitignoreで管理除外する

##はじめに
Unity3Dを使用したプロジェクト開発は多くのパッケージやAsset-Storeアセットを利用が前提となってきました。
今後はPackageManager管理にシフトし、リポジトリへのコミットしなくてもアセット更新が可能な環境が整うようになります。
これに合わせて個人のリポジトリにある.gitignore編集し始めたのですが、正直理解度が足らずうまく設定できず、時間を潰してしまいました。

また.gitignoreの記事はたくさんあれど、調べたい内容が分散気味だったのでたどり着けなかったので、個人的なメモとしてまとめてみました

##エントリーのゴール
今回の目的は以下を実行できるようにしたかった
・.gitignoreを作成する
・SourceTreeでの.gitignoreの編集
・gitignoreの記述形式の理解を深める
・Unityプロジェクト上のAssets以下のフォルダ・ファイルの除外
悪い意味で曖昧に運用してた部分を正しくできるにしたかった

##.gitignoreを作成する
.gitignore自体は、デフォルトで作られるものか、手書きのテンプレを作ってコピペしていたいのですが、最近は"gibo"で作る方法もあります。
テンプレートも作れるようなので、以後はこちらも運用していきますかね
[まだ .gitignore を手で書いてるの？（giboの使い方）]
(https://www.fast-system.jp/git-gitignore-generat/)


##SourceTreeでの.gitignoreの編集
SourceTreeでプロジェクトごとの.gitignoreoは以下で編集できる
・メニューから”リポジトリ”->"リポジトリ設定…”を選択
![gitignore_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/a9084a13-3f56-88be-0331-01a0d51faec4.png)
・表示されるウィンドウで”高度な設定”ボタンを押下![gitignore_3.png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/60926394-282f-9c13-acc1-96a367a50295.png)
・リポジトリ限定無視リストパスの横にある”編集”ボタンを押下
テキストエディットで内容を確認、編集できる
![gitignore_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/5b686d55-f1fe-7fa6-a53c-3ba51cc795a6.png)

##.gitignoreの書式について
理解が薄かったので詳細にかかれていたこちらのエントリーを熟読しました
[@anqooqie様　[Git] .gitignoreの仕様詳解]
(https://qiita.com/anqooqie/items/110957797b3d5280c44f)

####0.gitignoreでの記述で注意すること

```
ちなみに、Gitリポジトリのルート、あるいはOSのルートからの絶対パス指定をする方法はない。
.gitignoreはそこから下のディレクトリにしか影響を及ぼせない。
```
意識したことなかったけど、これがわかってなくて、反映されないと思い込みすぎてました…


```text:.gitignore
#プロジェクト全体で”XWeaponTrailフォルダ以下”を除外
XWeaponTrail/
```


####1.ユニーク名の除外設定

フォルダ全体でユニーク名であれば、以下のように記述
ex)プロジェクト内の”WeaponTrail"を除外したい
![gitignore_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/c7db3b36-89a5-6a9b-1024-cfe50705406a.png)

この場合は以下のように記述する

```text:.gitignore
#XWeaponTrailフォルダ以下”を除外
XWeaponTrail/
XWeaponTrail.meta
```

するとSourceTreeの管理から除外されてるのが確認できた
![gitignore_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/b3c57118-50d9-3556-9c53-f65c24e4d3b6.png)

####2.相対パスにあるフォルダ名を除外設定

・Assetsからの相対パスにある特定フォルダを除外したい
Unity-AssetStoreやPackageManagerパッケージで除外したいフォルダが多いと思うので、試しに"Demons"フォルダを除外をしようと思います
![gitignore_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/99265ab8-cf14-4fd4-68a4-eb5331e4f7f2.png)
.gitignoreに除外したいフォルダのパスで記述するも…
![gitignore_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/efc19b30-2fd3-3367-539e-0baccbff3706.png)
![gitignore_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/85afcb66-5ddd-0266-8c45-059003160ca2.png)
あれれ？除外されなてない…なんでだろう？？

改めて仕様を読み直していると間違えていました…以下の部分が重要だったのを解釈できていませんでした。

```
ちなみに、Gitリポジトリのルート、あるいはOSのルートからの絶対パス指定をする方法はない。
.gitignoreはそこから下のディレクトリにしか影響を及ぼせない。
```
そこで.gitignoreから

![gitignore_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/8fa91c19-ece5-b8b2-93d9-d972fda0e3e3.png)
上記に準拠して.gitignoreのあるパスからに変更しました![gitignore_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18545/1b336412-86d4-68b5-2fc7-1c7f4f62272f.png)
するとイメージ通り、フォルダ以下が除外することができました
参考記事にありました.gitignoreの書式に注意して書いていけば間違いはないと思います

```
/を含まない行（fileなど）
.gitignore以下の全サブディレクトリ下にあるこの名前のファイル or ディレクトリを無視する

末尾以外にのみ/を含む行（/file, /path/to/file, path/to/fileなど）
.gitignoreが置いてあるディレクトリをカレントディレクトリとする相対パスで指定されるファイル or ディレクトリを無視する

末尾だけ/な行（directory/など）
.gitignore以下の全サブディレクトリ下にあるこの名前のディレクトリを無視する
末尾以外にも末尾にも/を含む行（/directory/, /path/to/directory/, path/to/directory/など）

.gitignoreが置いてあるディレクトリをカレントディレクトリとする相対パスで指定されるディレクトリを無視する
```

※最初からちゃんとドキュメントとか読めや…と反省しましたorz
ドキュメント読み込みは本当に重要ですね

###おまけ：.gitignoreに記載したのに反映されない
・リポジトリにコミットされたフォルダは除外されない
当たり前だけど既にリポジトリ上に存在するものは、.gitignoreでは除外されない。先に.gitignore設定を行ってからコミットすること

・キャッシュによる未反映
.gitignoreの仕様にたどり着けてない時は、キャッシュを疑ってたりしていました。こういうケースにもたどり着くこともあるので、注意したい

[@fuwamaki様：.gitignoreに記載したのに反映されない件]
(https://qiita.com/fuwamaki/items/3ed021163e50beab7154)

###まとめ
効果は薄いかもしれないけど、再度調査で手間とられるよりはいいかと思い、まとめてみました。別に.gitignoreは１ファイルにまとめる必要もないですが、何度も作ることにはなるので、丁度よかったかと思います

ガバ記事なので、ツッコミはお手柔らかにお願いいたしますm(_)m


###参考記事
大変参考になりました、誠にありがとうございます
[@fuwamaki様：.gitignoreに記載したのに反映されない件]
(https://qiita.com/fuwamaki/items/3ed021163e50beab7154)
[@anqooqie様：[Git] .gitignoreの仕様詳解]
(https://qiita.com/anqooqie/items/110957797b3d5280c44f)