既存のUnity ProjectをGithubに上げるときに気をつけること

UnityのprojectをGithubにあげたいときに、初心者が戸惑う箇所があるのでまとめてみました。

## ■ ProjectをGithubに上げる
最初に、UnityのプロジェクトをGithubにアップロードする際に行う手順を確認します。わかっている方は読み飛ばして構いません。

リポジトリ作成後、リモートからクローンするときにGit bash Commandとgithub Desktopを使用するケースがあります。今回はGit Bash Command を使用する方法で説明します。

リポジトリ作成後にProjectを作成する場合は、該当ディレクトリ上で新規Projectを起動すれば問題ないです。
既にあるUnity Projectを作成したリポジトリに紐づけたい場合は、以下のコマンドを実行してあげましょう。

```php: コマンドプロンプト (Macならターミナル)
echo "# sample" >> README.md
  git init
  git add README.md
  git commit -m "first commit"
  git branch -M main
  git remote add origin hoge(clone link)
  git push -u origin main
```

Pushが完了した後にGithubのサイト上でReadme.mdがアップロードされていればOKです。
hogeの部分を自分がクローンするリポジトリのURLを入れてください。

## ■ Error1: アップロードするファイルが多すぎる
リポジトリへの紐付けが完了し、いざプロジェクトをアップロードしようとしてそのままpushしてしまうと、アップロードが永遠に終わらず困ってしまうことがあります。

ファイル数が膨大なUnityのProjectをそのまま一気にアップロードすると処理に非常に時間がかかってしまいます。

エラーではないですが対処した方がいいでしょう。これを解決するには`.gitignore`でアップロードする必要のないファイル等を設定することが必要です。Project内にはGitにあげる必要のないものが多く存在します。別のPCで同じProjectを使用するときは不足分を再構成して動くようになっているためです。本エラーでは、これらのファイル等が原因になっていることが多いです。

作業ディレクトリに移動し`.gitignore`ファイルを作成します。その中に以下の内容を入れておきます。これによりアップロードの必要ないファイルたちが邪魔することがなくなります。

```php: .gitignore
# This .gitignore file should be placed at the root of your Unity project directory

# =============== #
# Unity generated #
# =============== #
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/
[Mm]emoryCaptures/
# Recordings are often very large
[Rr]ecordings/

# ===================================== #
# Visual Studio / Rider cache directory #
# ===================================== #
.vs/
.vscode/
.idea/

# ===================================== #
# OS generated files #
# ===================================== #
.DS_Store*
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# ==================================== #
# Autogenerated by Unity #
# ==================================== #
/[Ll]ibrary/
/[Ll]ocal[Cc]ache/

# ==================================== #
# User settings #
# ==================================== #
UserSettings/

# ==================================== #
# Crashlytics generated file #
# ==================================== #
crashlytics-build.properties

# ==================================== #
# Builds output #
# ==================================== #
*.apk
*.aab
*.ipa
*.unitypackage

# ==================================== #
# JetBrains Rider #
# ==================================== #
.idea/

# ==================================== #
# Visual Studio #
# ==================================== #
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db

# ==================================== #
# macOS #
# ==================================== #
*.swp
*.lock
*.DS_Store
*.AppleDouble
*.LSOverride

# ==================================== #
# Thumbnails #
# ==================================== #
*.lproj
*.swp
*.lock
*.DS_Store
*.AppleDouble
*.LSOverride

# ==================================== #
# Windows #
# ==================================== #
Thumbs.db
ehthumbs.db

# ==================================== #
# Rider #
# ==================================== #
.idea/

```




## ■ Error2: ファイルの容量が大きいとそのままでは送れない
UnityのSceneファイルなど、一つのファイルで100MB以上の容量を持つものをGithubに上げる場合は以下のエラーが発生する可能性があります。


`remote: error: File "ファイル名" is "OOO.OO" MB; this exceeds GitHub's file size limit of 100.00 MB`
`remote: error: GH001: Large files detected. 
You may want to try Git Large File Storage - https://git-lfs.github.com.`

このエラーは、GitHubがファイルサイズの上限を設定しているために起きています。
これを解消する方法として Git LFS（Git Large File Storage）を用いるのが有効です。

### Git LFS のインストール
公式の[ダウンロードページ](git-lfs.com)か、パッケージマネージャーを使ってインストールできます。詳しくは[「Git Large File Storage をインストールする」](https://docs.github.com/ja/repositories/working-with-files/managing-large-files/installing-git-large-file-storage?platform=mac)を確認してください。

インストールが完了したら正しく動作するか確認しましょう。
```php: Git Bash
$ git lfs install
> Git LFS initialized.
```

### Git LFSがtrackするファイル拡張子を指定する
Git LFSを用いて容量の大きいファイルをアップロードするには、特定のファイルやファイルタイプをGit LFSで追跡する必要があります。追跡するファイルの拡張子を設定しましょう。作業ディレクトリに移動し、`git lfs track`コマンドを実行します。(以下はSceneファイルを追跡する場合です。拡張子の部分は適宜置き換えてください。)
```php: Git Bash
$ git lfs track *.unity 
```

```php: .gitattributes
*.unity filter=lfs diff=lfs merge=lfs -text
```
このコマンドを実行すると、`.gitattributes`ファイルに追跡するファイルのパターンが追加されます。このファイルが、リポジトリに含めて他の開発者と共有する必要があるので先にリモートリポジトリにアップロードしましょう。

### .gitignoreと.gitattributesを上げる
通常のアップロードなのでわかる人は飛ばして構いません。

以下のコマンドを実行します。
```php: Git Bash
$ git add .gitignore .gitattributes
$ git commit -m "first commit."
$ git push origin main
```
### 注意
他のファイル(特に容量の大きいファイルやファイル数が多いもの)を同時に`git add`しないことを推奨します。`.gitignore`や`.gitattributes`がリモートにあがっていない状態で実行してしまうと最初に説明したエラーが発生する可能性があります。

## ■ メインのUnity projectをアップロード
これでUnity ProjectをGithubに上げる準備が整いました。一度に上げるファイルが10,000個を超えないよう`.gitignore`で調整しながらアップロードしましょう。

## 参考サイト
* [Git LFS (Large File Storage) | Learn Git (Youtube)](https://www.youtube.com/watch?v=jXsvFfksvd0)