LaravelプロジェクトをGitHubで管理

自ら投稿していたGitHubとVSCodeの連携ではLaravelのプロジェクトはうまく連携できなかったのでやりかたをメモ。

環境は
macOS 14.0
Laravel v10.2.6
git 2.39.3 (Apple Git-145)
です。

# 1. GitHubで新たしいリポジトリを作成
![スクリーンショット 2023-10-26 21.43.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456861/8dc345cf-5fa4-99f8-0fe0-efd3346df157.png)

新規リポジトリを作成します。
後ほどすべてpushした際に、データベースのパスワードが書かれたファイルまで上がってしまうので、気になる場合はPrivateに。

※リポジトリ作成の際に、「Initialize this repository with:」の各項目を追加してしまうと、このあとの初めのpushの際にリジェクトされてしまいます。
なので、
・Add a README file → チェックしない
・Add .gitinore → デフォルトのまま（None)
・Choose a license → デフォルトのまま (None)
でリポジトリを作成するようにしてください。

新しいリポジトリを作成したら、[<>Code]ボタンからHTTPSのURLをコピーしておきます。
![スクリーンショット 2023-10-26 21.46.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456861/cb5e503f-c504-93a7-c31d-186d69ed8a9c.png)


# 2.Laravelのプロジェクトを作成
ターミナルを起動して、Laravelのプロジェクトを作成します。
``` コマンド:コマンド
% composer create-project --prefer-dist laravel/laravel new_repository "10.*"
```
各ファイル・フォルダが作成されました。
```:ls -la 結果
drwxr-xr-x  24 xxx  wheel     768 10 26 21:53 .
drwxr-xr-x   6 xxx  wheel     192 10 26 21:52 ..
-rw-r--r--   1 xxx  wheel     258  8 10 16:19 .editorconfig
-rw-r--r--   1 xxx  wheel    1148 10 26 21:53 .env
-rw-r--r--   1 xxx  wheel    1097  8 10 16:19 .env.example
-rw-r--r--   1 xxx  wheel     186  8 10 16:19 .gitattributes
-rw-r--r--   1 xxx  wheel     243  8 10 16:19 .gitignore
-rw-r--r--   1 xxx  wheel    4158  8 10 16:19 README.md
drwxr-xr-x   7 xxx  wheel     224  8 10 16:19 app
-rwxr-xr-x   1 xxx  wheel    1686  8 10 16:19 artisan
drwxr-xr-x   4 xxx  wheel     128  8 10 16:19 bootstrap
-rw-r--r--   1 xxx  wheel    1882  8 10 16:19 composer.json
-rw-r--r--   1 xxx  wheel  296306 10 26 21:53 composer.lock
drwxr-xr-x  17 xxx  wheel     544  8 10 16:19 config
drwxr-xr-x   6 xxx  wheel     192  8 10 16:19 database
-rw-r--r--   1 xxx  wheel     248  8 10 16:19 package.json
-rw-r--r--   1 xxx  wheel    1084  8 10 16:19 phpunit.xml
drwxr-xr-x   6 xxx  wheel     192  8 10 16:19 public
drwxr-xr-x   5 xxx  wheel     160  8 10 16:19 resources
drwxr-xr-x   6 xxx  wheel     192  8 10 16:19 routes
drwxr-xr-x   5 xxx  wheel     160  8 10 16:19 storage
drwxr-xr-x   6 xxx  wheel     192  8 10 16:19 tests
drwxr-xr-x  40 xxx  wheel    1280 10 26 21:53 vendor
-rw-r--r--   1 xxx  wheel     263  8 10 16:19 vite.config.js
```
プロジェクトフォルダができたらそのフォルダまで移動しておきましょう。

# 3. Gitの設定とローカルリポジトリ初期化
作成したプロジェクトフォルダをローカルリポジトリを構築して初期化します。
```
% git config --global user.name "ユーザー名"
% git config --global user.email "メールアドレス"

% git init
```
ユーザ名には一応GitHubのユーザ名、メールアドレスにはGitHubに登録しているアドレスを登録しました。
ユーザ登録した初期化します。

これでローカルリポジトリが構築できました。

# 4.リモートリポジトリとローカルリポジトリの紐付け
3.で作成したローカルリポジトリをリモートリポジトリと紐付けます。
```
% git remote add origin リモートリポジトリURL
```
リモートリポジトリURLには1.でコピーしたHTTPSのURLをペーストします。

# 5. ローカルからリモートへのプッシュ
紐付けたらデータをプッシュします。
順番としては「プッシュしたいファイルを指定（ステージング）」→「コミット」→「プッシュ」です。
```
% git add .
% git commit -m 'First commit'
% git push origin main
```

1行めでカレントフォルダ内すべてをステージング
2行めでコミット
3行めでリモートリポジトリにプッシュ
です。

プッシュする際の「main」の記述ですが、かつては「master」だったとのことで、参考にするWebサイトによってはmasterで記載されている場合もあります。
その通りに実行すると下記エラーが出力されます
```
error: src refspec master does not match any
error: failed to push some refs to 'git@github.com:user-name/repository-name.git'
```
このエラーが出た場合は「main」の箇所が「master」になっていないか確認してみましょう。

エラーなく完了した場合は以下のように出力されるはずです。
```
Enumerating objects: 102, done.
Counting objects: 100% (102/102), done.
Delta compression using up to 8 threads
Compressing objects: 100% (84/84), done.
Writing objects: 100% (102/102), 72.25 KiB | 4.52 MiB/s, done.
Total 102 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), done.
To https://github.com/xxx/Laravel_Test.git
 * [new branch]      main -> main
```
完了したらGitHubに接続してプッシュされていることを確認しましょう。
![スクリーンショット 2023-10-26 22.31.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456861/2ef8349e-5265-4af5-2386-89f2bd8aeebd.png)

これでLaravelのプロジェクトをGitHubで管理できるようになりました。

こんな面倒な手順を踏まないといけないのも、LaravelおよびGitHubが既存の空じゃないフォルダを使おうとするとエラー出すからです。
仕様だからしかたない...

# 参考
参考にしたサイトはこちら
・[LaravelプロジェクトをGitHubにpushする方法と注意点](https://tech.amefure.com/web-github-laravel-push)
・[git push時のerror: src refspec master does not match anyについて](https://blog.deepblue-ts.co.jp/git/git-push-error/)