UnityをGithubで管理したい。基本は下記リンクに倣って進めていくだけ。
手順
上記リンクから、筆者好みにアレンジした手順を以下に記しておく。
- Unityでプロジェクト作成
- Unityの「Edit」→「Project Settings」で以下を設定
- Editor / Asset Serialization / Mode ->「Force Text」
- Version Control / Model ->「Visible Meta Files」
-
リモートから新規のリポジトリを作成(
README
gitignore
等のチェックは外しとく) - 作成したプロジェクトディレクトリをターミナルから
$ git init
(必要に応じて$ touch README.md
) -
Unity用gitignoreのテンプレートをDLし
.gitignore
に改名してから同ディレクトリに加える -
Unity用gitattributesのテンプレートをDLし
.gitattributes
に改名してから同ディレクトリに加える
- Git LFSで管理する場合は
binary
の行をすべてfilter=lfs diff=lfs merge=lfs binary
に更新すること- それが面倒ならこっちを使う
- Git LFSを使うなら
$ git lfs install
$ git add .
$ git commit -m "first commit"
$ git branch -M main
$ git remote add origin git@github.com:[Githubのユーザ名]/[リポジトリ名].git
$ git push -u origin main
つまづいたこと
筆者の環境ではいろいろと厄介なことが起こってしまった。それをメモしておく。
1. masterとmain問題
$ git branch -M main
をしなかったせいでこうなった。
$ git push -u origin main
error: src refspec main does not match any
Githubの仕様変更により、master
は廃止されmain
へと置き換えられた…はずであった。
そのバージョン違い?で起こってしまうのがこの食い違い。
- 生成したリモートリポジトリのブランチ名は
main
-
git init
するときにできたブランチ名はmaster
$ git branch
* master # mainじゃない!
という状況になっている。
$ git branch -m main # masterをmainにリネーム
$ git config --global init.defaultBranch main # ついでに今後git initしたときに同じ症状が起こらないようにしておく
こうすれば解決。もう一回push
してみよう。
2. WSL問題
SSHが通らない問題が発生して、push
できない人。
$ git push -u origin main
The authenticity of host 'github.com (13.114.40.48)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,13.114.40.48' (RSA) to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
ちなみにsshではなく$ git remote add origin https://github.com/[Githubのユーザ名]/[リポジトリ名].git
でやろうとしても弾かれた。
$ git push -u origin main
Username for 'https://github.com': [Githubのユーザ名]
Password for 'https://[Githubのユーザ名]@github.com':
remote: Invalid username or password. # パスワード正しくてもこうなる
fatal: Authentication failed for 'https://github.com/[Githubのユーザ名]/[リポジトリ名].git/'
これを機に、以前から逃げ続けてきたGithubのSSH問題にケリをつけることにした。
とりあえず下記リンクに従ってSSHキーを生成する。
リンク先についてのメモ(思ったことの覚え書き)↓
- 秘密鍵はわざわざ
id_rsa_github
なんてせず、普通にid_rsa
でいい。また、もし既にid_rsa
が生成済みならそれを使い回せばOK。(セキュリティ的に大丈夫かは知らん。) - WSL使ってる人は、Windows側のSSHキー(
C:\Users\[Windowsのユーザ名]\.ssh
)とは別に、WSL側のホームディレクトリに別途SSHキーが必要(~/.ssh
)。
リンク先の手順に従っていくと、「WSL使ってる」かつ「WSLのホームディレクトリの位置を変更してる」という人は以下のようになってしまう。
(パワーシェル使ってる人と、WSL使っててもホームディレクトリの変更をしてない人は大丈夫なはず。)
$ ssh-add ~/.ssh/id_rsa
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'XXX/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "XXX/.ssh/id_rsa": bad permissions
どうやら、Windowsのパーミッションの仕様が(WSL視点だと)ガバガバなのが原因らしい。
解決法1
基本的には上に従えばOK。この手順だと、SSHキーは作り直しになるので注意。
仕組みをよく分かってない人はおとなしく解決法2へレッツゴー。
解決法2
基本的には解決法1とやってることは同じ。
だが、すでに生成したSSHキーをそのまま移行したい場合(筆者はそうだった)は以下のようにする。
$ mkdir /home/[WSLのユーザ名]/.ssh
$ mv ~/.ssh/* /home/[WSLのユーザ名]/.ssh/
$ cd /home/[WSLのユーザ名]/.ssh/
$ chmod 644 id_rsa.pub
$ chmod 644 known_hosts
$ chmod 600 id_rsa
$ chmod 700 ../.ssh/
$ cd ~
$ rmdir .ssh/ # 消せなかったら再起動してリトライ
$ ln -s /home/[WSLのユーザ名]/.ssh
ここまでできたら、もう一回以下を試してみる。
$ ssh-add ~/.ssh/id_rsa
$ ssh -T github
Hi [Githubのユーザ名]! You've successfully authenticated, but GitHub does not provide shell access.
こうなれば成功。今度こそpushできるはず!
まとめ
WSLってめんどいね。でもパワーシェルは使いたくないから仕方ないね。