未経験者がLaravel共同開発での詰まりポイントの「メモ」をまとめてみた【GitHub編】

#はじめに
タイトルの通り、共同開発講座を受講中に起きたトラブルや詰まりポイントをまとめたメモ（約50記事）をジャンル別に全て公開します。
ジャンルは以下の通りなので、気になるものがあればぜひご覧ください。
###【ジャンル一覧】
・[GitHub関連](https://qiita.com/kei_Q/items/1e421eef9b3bdbcdd9e9)
・[Laravel関連](https://qiita.com/kei_Q/items/79ef7679b28bb3c9738e)
・[データベース（migration/seeding）関連](https://qiita.com/kei_Q/items/cf13f486628bb5662089)
・[環境関連](https://qiita.com/kei_Q/items/412a9695f26aad25a99c)
・[総まとめ集](https://qiita.com/kei_Q/items/e197268fc29fdd664b64)

下記の点を、ご了承ください。
・ジャンルで統一しているため、内容に関しては統一性はありません。
・メモの難易度もバラバラです。
・初学者向けの内容となっております。
・自分用のメモを転用しておりますので、表現が稚拙な部分があるかと思います。
**・あくまで僕のメモです！！**

#・branchの切り方
**ターミナルにて編集したファイルがあるディレクトリまで移動する**

```
cd ディレクトリ名
```

**git branch で今自分がいるブランチを確認する**

```
[vagrant@local-docker lara-d]$ git branch
* develop
```

この　＊develop　はある機能を開発するために切ったブランチ（自分の大元となるブランチ）で、ここからさらにブランチを切らないといけない

**新しいブランチを切る**

```
git branch 新しいブランチ名　
```

git checkout ブランチ名　でブランチを移動する（＊が動く）

```
[vagrant@local-docker lara-d]$ git branch
  develop
* 新しいブランチ名
```

↑このようになれば、このブランチで開発を進めて大丈夫！

#・git add -u コマンド

####詰まった状況
開発ブランチで不要になったファイル（Modelファイル）をローカルテキストエディタで削除
↓
git add .
↓
git commit -m "○○"
↓
リモートへpush

上記を行うが削除したModelファイルが残ったままで、削除が反映されていない。
ただ、ローカルテキストエディタ上では消えている。。


####原因
<font color="red">ファイル削除に関しては
git add .    コマンドの「　.　」は”全てのファイルをステージング”の意味になるので
削除されたものはリモート上では消えないことになる（存在し続ける）</font>


####解決策
ステージングする時にオプションコマンドを用いる
<font color="red">git add -u</font>　コマンドを使用する
-u　とは　update　の略で、削除も反映してくれるらしい。
具体的に言うと
Git 管理対象のファイルの変更、削除をすべてステージする。（新規ファイルは無視。）

#・git clone と git pull の違い

####【git clone】

リモートリポジトリにあるディレクトリ構造を「そのまま全て」ローカルリポジトリの新たなブランチに丸々コピーする。

→開発の初回に行う？？


####【git pull】
Git cloneを行った後、誰かが開発して、元のリモートリポジトリにpushしたとする。
その更新分のみを自分のローカルリポジトリに反映させたい場合、git pullを用いてコピーすると
更新した差分のみが自分のところにpullされる（引っ張ってくる）。

→開発過程に入ると更新されるたびに必要であれば毎回行う作業


#・リモートからのpull方法

pullは基本的にリモートのメインブランチに行う。

```
//ブランチを表示して自分がローカルのメインブランチにいることを確認
[vagrant@local-docker lara-d]$ git branch
* develop_alpha
  feature/kei/createProductsTable
  feature/kei/createUserRegist
```

pull実行時は以下のようになる↓↓

```
//pullコマンドを実行
[vagrant@local-docker lara-d]$ git pull origin develop_alpha


From https://github.com/*******/*******
 * branch            develop_alpha -> FETCH_HEAD
Auto-merging routes/web.php
Removing resources/views/welcome.blade.php
Merge made by the 'recursive' strategy.
 app/Providers/AppServiceProvider.php                        |   3 +-
 config/app.php                                              |   2 +-
 database/.DS_Store                                          | Bin 0 -> 6148 bytes
 .../migrations/2020_11_21_234119_create_m_categories.php    |  31 ++++++++
 .../2020_11_21_234253_create_m_sales_statuses.php           |  31 ++++++++
 .../2020_11_21_234400_create_m_products_statuses.php        |  31 ++++++++
 database/migrations/2020_11_22_120214_create_m_products.php |  42 +++++++++++
 .../migrations/2020_11_23_031335_create_purchases_table.php |  39 ++++++++++
 database/seeds/DatabaseSeeder.php                           |   5 ++
 database/seeds/M_CategoriesSeeder.php                       |  23 ++++++
 database/seeds/M_ProductsSeeder.php                         |  75 +++++++++++++++++++
 database/seeds/M_Products_StatusesSeeder.php                |  31 ++++++++
 database/seeds/M_Sales_StatusesSeeder.php                   |  27 +++++++
 database/seeds/PurchasesTableSeeder.php                     |  65 ++++++++++++++++
 public/css/base.css                                         |  79 ++++++++++++++++++++
 resources/views/commons/error_messages.blade.php            |   7 ++
 resources/views/commons/footer.blade.php                    |   4 +
 resources/views/commons/header.blade.php                    |  15 ++++
 resources/views/layouts/app.blade.php                       |  34 +++++++++
 resources/views/login/login.blade.php                       |  13 ++++
 resources/views/welcome.blade.php                           |  99 -------------------------
 routes/web.php                                              |   4 +-
 22 files changed, 557 insertions(+), 103 deletions(-)
 create mode 100644 database/.DS_Store
 create mode 100644 database/migrations/2020_11_21_234119_create_m_categories.php
 create mode 100644 database/migrations/2020_11_21_234253_create_m_sales_statuses.php
 create mode 100644 database/migrations/2020_11_21_234400_create_m_products_statuses.php
 create mode 100644 database/migrations/2020_11_22_120214_create_m_products.php
 create mode 100644 database/migrations/2020_11_23_031335_create_purchases_table.php
 create mode 100644 database/seeds/M_CategoriesSeeder.php
 create mode 100644 database/seeds/M_ProductsSeeder.php
 create mode 100644 database/seeds/M_Products_StatusesSeeder.php
 create mode 100644 database/seeds/M_Sales_StatusesSeeder.php
 create mode 100644 database/seeds/PurchasesTableSeeder.php
 create mode 100644 public/css/base.css
 create mode 100644 resources/views/commons/error_messages.blade.php
 create mode 100644 resources/views/commons/footer.blade.php
 create mode 100644 resources/views/commons/header.blade.php
 create mode 100644 resources/views/layouts/app.blade.php
 create mode 100644 resources/views/login/login.blade.php
 delete mode 100644 resources/views/welcome.blade.php
[vagrant@local-docker lara-d]$ 
```

#・リモートリポジトリへのpush時にアクセスが拒否される
※こちらは、制限付き？のgithubリポジトリでの、認可？されるためのurl設定の方法です

ターミナルにて

```
//commitする

[vagrant@local-docker lara-d]$ git commit -m"add:DB構築-products関連"
[feature/keisuke/Db_Products 8832492] add:DB構築-products関連
 12 files changed, 285 insertions(+), 2 deletions(-)
 create mode 100644 database/.DS_Store
 create mode 100644 database/migrations/2020_11_21_234119_create_m_categories.php
 create mode 100644 database/migrations/2020_11_21_234253_create_m_sales_statuses.php
 create mode 100644 database/migrations/2020_11_21_234400_create_m_products_statuses.php
 create mode 100644 database/migrations/2020_11_22_120214_create_m_products.php
 create mode 100644 database/seeds/M_CategoriesSeeder.php
 create mode 100644 database/seeds/M_ProductsSeeder.php
 create mode 100644 database/seeds/M_Products_StatusesSeeder.php
 create mode 100644 database/seeds/M_Sales_StatusesSeeder.php

//状態を確認

[vagrant@local-docker lara-d]$ git status
# On branch feature/kei/Db_Products
nothing to commit, working directory clean
```

Git push origin HEAD で今のメインブランチにプッシュするがエラーが起きる

```
//pushする

[vagrant@local-docker lara-d]$ git push origin HEAD
Username for 'https://github.com': ○○○○○○
Password for 'https://********@github.com': 
remote: Permission to ****/****.git denied to *******.
fatal: unable to access 'https://github.com/****/****.git/': The requested URL returned error: 403

//リモートの登録URLを確認してみる
[vagrant@local-docker lara-d]$ git remote -v
origin	https://github.com/****/****.git (fetch)
origin	https://github.com/****/****.git (push)
[vagrant@local-docker lara-d]$ 

```

Remoteに登録してあるurlの変更

```
[vagrant@local-docker lara-d]$ git remote set-url origin https://○○○○○○@github.com/quest-academia/yanbaru_ec_traning.git/
```

####原因
元々セットしていたURL
https://github.com/・・・・/・・・・.git

httpsの後ろに何もないのが原因。
ここには自分のgithubアカウント名が入る。
正しくは
https://○○○○○○@github.com/・・・・/・・・・.git/
となる。
この後再プッシュして成功


#・リモート名の変更
git remote set-url コマンドを使ってurlをセットし直す

```
[vagrant@local-docker lara-d]$ git remote set-url origin https://○○○○○○@github.com/****/****.git
```

セットされたかの確認

```
[vagrant@local-docker lara-d]$ git remote -v
origin	https://○○○○○○@github.com/****/****.git (fetch)
origin	https://○○○○○○@github.com/****/****.git (push)
[vagrant@local-docker lara-d]$ 

//セット完了！
```

#・共同開発中、最新のリモートdevelopをプルして開発ブランチにマージする方法

前提として、pullするのはローカルのメインブランチなので、現在開発中（作業中）のブランチからメインブランチに移動してからpullする必要がある。
移動時にコミットしていない部分があると、開発中の内容がメインブランチに移動してしまう。
なので、まずは開発中のブランチにて、commit もしくは　stashをして、移動できる状態を作ること。
個人的にはcommitの方が安心。

**ここからは開発ブランチにて、commit もしくは stash が行われたことを前提に書きます。**

develop_alphaブランチ（ローカルのメインブランチ）に移動

```
[vagrant@local-docker lara-d]$ git checkout develop_alpha
Switched to branch 'develop_alpha'
```

移動を確認

```
[vagrant@local-docker lara-d]$ git branch
  createUserRegist_2
* develop_alpha
```

リモートのdevelop_alphaブランチ(リモートのメインブランチ)をpullしてくる

```
[vagrant@local-docker lara-d]$ git pull origin develop_alpha
remote: Enumerating objects: 43, done.
remote: Counting objects: 100% (43/43), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 55 (delta 33), reused 39 (delta 33), pack-reused 12
Unpacking objects: 100% (55/55), done.
From https://github.com/****/****
 * branch            develop_alpha -> FETCH_HEAD
Updating 53acc0b..fbabfb3
Fast-forward
 app/Http/Controllers/HomeController.php                             |  16 ++
 app/User.php                                                        |   1 +
 composer.lock                                                       | 316 +++++++++++++++++++++++++++++++
 .../2020_11_20_032020_create_m_shipments_statuses_table.php         |  31 +++
 database/migrations/2020_11_22_120214_create_m_products.php         |   3 +-
 database/migrations/2020_11_23_031335_create_purchases_table.php    |   8 +-
 database/migrations/2020_12_21_064840_create_t_orders_table.php     |  36 ++++
 .../migrations/2020_12_21_151942_create_t_orders_details_table.php  |  44 +++++
 database/seeds/DatabaseSeeder.php                                   |  11 +-
 database/seeds/M_ShipmentsStatusesTableSeeder.php                   |  22 +++
 database/seeds/M_UsersTableSeeder.php                               |  30 ---
 database/seeds/PurchasesTableSeeder.php                             |  20 +-
 database/seeds/T_OrdersDetailsTableSeeder.php                       |  40 ++++
 database/seeds/T_OrdersTableSeeder.php                              |  22 +++
 resources/views/auth/login.blade.php                                |  38 ++++
 resources/views/commons/header.blade.php                            |  29 ++-
 resources/views/home.blade.php                                      |  14 ++
 resources/views/login/login.blade.php                               |  13 --
 routes/web.php                                                      |  28 ++-
 19 files changed, 647 insertions(+), 75 deletions(-)
 create mode 100644 app/Http/Controllers/HomeController.php
 create mode 100644 database/migrations/2020_11_20_032020_create_m_shipments_statuses_table.php
 create mode 100644 database/migrations/2020_12_21_064840_create_t_orders_table.php
 create mode 100644 database/migrations/2020_12_21_151942_create_t_orders_details_table.php
 create mode 100644 database/seeds/M_ShipmentsStatusesTableSeeder.php
 create mode 100644 database/seeds/T_OrdersDetailsTableSeeder.php
 create mode 100644 database/seeds/T_OrdersTableSeeder.php
 create mode 100644 resources/views/auth/login.blade.php
 create mode 100644 resources/views/home.blade.php
 delete mode 100644 resources/views/login/login.blade.php

//pullが完了
```

開発ブランチに移動する

```
[vagrant@local-docker lara-d]$ git checkout createUserRegist_2
Switched to branch 'createUserRegist_2'
```

pullしてきたdevelop_alphaブランチを、開発ブランチにマージする

```
[vagrant@local-docker lara-d]$ git merge develop_alpha
Auto-merging routes/web.php
Removing resources/views/login/login.blade.php
Auto-merging database/seeds/DatabaseSeeder.php
CONFLICT (content): Merge conflict in database/seeds/DatabaseSeeder.php
Auto-merging app/User.php
Automatic merge failed; fix conflicts and then commit the result.
```

コンフリクトが起きた・・・
↓
エディタ上でコンフリクト解消

もう一度develop_alphaをマージしようとするが...

```
[vagrant@local-docker lara-d]$ git merge develop_alpha
error: 'merge' is not possible because you have unmerged files.
hint: Fix them up in the work tree,
hint: and then use 'git add/rm <file>' as
hint: appropriate to mark resolution and make a commit,
hint: or use 'git commit -a'.
fatal: Exiting because of an unresolved conflict.
```
エラー。
どうやらマージされていないファイルがある？？...いや、だからマージしたいんだが...？
ただ、コンフリクトが起きているファイルをどうにかしないといけない。

そこで

git statusで状態を確認

```
[vagrant@local-docker lara-d]$ git status
# On branch createUserRegist_2
# You have unmerged paths.
#   (fix conflicts and run "git commit")
#
# Changes to be committed:
#
#	new file:   app/Http/Controllers/HomeController.php
#	modified:   app/User.php
#	modified:   composer.lock
#	new file:   database/migrations/2020_11_20_032020_create_m_shipments_statuses_table.php
#	modified:   database/migrations/2020_11_22_120214_create_m_products.php
#	modified:   database/migrations/2020_11_23_031335_create_purchases_table.php
#	new file:   database/migrations/2020_12_21_064840_create_t_orders_table.php
#	new file:   database/migrations/2020_12_21_151942_create_t_orders_details_table.php
#	new file:   database/seeds/M_ShipmentsStatusesTableSeeder.php
#	modified:   database/seeds/M_UsersTableSeeder.php
#	modified:   database/seeds/PurchasesTableSeeder.php
#	new file:   database/seeds/T_OrdersDetailsTableSeeder.php
#	new file:   database/seeds/T_OrdersTableSeeder.php
#	new file:   resources/views/auth/login.blade.php
#	modified:   resources/views/commons/header.blade.php
#	new file:   resources/views/home.blade.php
#	deleted:    resources/views/login/login.blade.php
#	modified:   routes/web.php
#
# Unmerged paths:
#   (use "git add <file>..." to mark resolution)
#
#	both modified:      database/seeds/DatabaseSeeder.php
```

commitされていない状態なので一度commitしてみる

```
[vagrant@local-docker lara-d]$ git add .

vagrant@local-docker lara-d]$ git commit -m "develop_alphaをプル、コンフリクト解消"
[createUserRegist_2 eb2549c] develop_alphaをプル、コンフリクト解消
```

**この後、開発ブランチへのマージに成功**


結果、commitしたらオッケーだった
コンフリクトが起きているファイルは自分のファイルを使うのか、リモートにあったファイルを使うのかを決めレバそれで解消されるので（？）
解消した後にcommitするとマージコミット？が生成される。

####この項のまとめ
#####①developに移動

```
git checkout develop
```

#####②developを最新に更新
```
git pull origin develop
```

#####③自分の開発に移動
```
git checkout 自開発branch
```

#####④現在の開発ブランチとdevelopブランチをマージ。
```
git merge develop
```

#####⑤コンフリクト処理(コンフリクトがあれば)
エディタ上で簡単に処理できます。（リモートの内容を使うのか、自分の内容を使うのか、両方の内容を使うのかを選択するだけ！）