［初学者向け］Githubを使って共同開発する時の話ー下準備からリモートリポジトリへの反映までー

Githubを用いた共同開発をスタートしました！
その中で早速Gitの使用方法を失念しており、色々と困難に直面したので、
今後の振り返りのためにまとめておきます！（基本的に何か新たな知識を得次第、更新します）
今回はGithub desktopではなく、ターミナルでの操作を想定しております。

#Githubを用いた共同開発の流れ・用語（準備＋運用）
まず、Gitを導入して、Appを作成し、リモートリポジトリに格納しましょう。
こちらを各ローカルリポジトリにクローンして、各データの編集を行います。
編集されたデータはインデックスに格納され、こちらをリモートリポジトリにコミットすることで、リモートリポジトリに反映されます。

-リポジトリ:
Gitの管理下にあるファイルやディレクトリの変更履歴を保管しておく入れ物です。

-ローカルリポジトリ/リモートリポジトリ：
ローカルリポジトリは、自分のPC上（ローカル環境）に置くリポジトリのことです。
リモートリポジトリは、外部のサーバなどのネットワーク上に置くリポジトリで、複数人で開発する際にはこちらのリモートリポジトリを使用します。

-インデックス：
バージョンを記録するためにファイルを一時的に登録する場所です。

#全体の流れ
 0.Git導入/App作成
 1.ローカルリポジトリ作成
 2.リモートリポジトリ作成
 3.Git clone（他メンバー）
 4.自身のブランチを作成
 ５.編集内容をインデックスへ格納＋コミット
 6.インデックスの内容をリモートリポジトリにプッシュ

##0.Git導入/App作成
Gitは、PCに元々ダウンロードされていません。
今回はHome brewを用いてインストールします。
*アカウントの作成は省きますが、未登録の方は、下記から登録ください。
https://github.com/

```:terminal
$ brew install git 

# Gitのバージョンを確認(インストールできているかチェック）
$ git --version 
```
また、これからGitで管理していくAppを作成しましょう。
今回はmysqlのデータベースにて作成します。

```:terminal
$  rails new App名 -d mysql
$  cd App名
$  rails db:create
```

##1.ローカルリポジトリ作成
Appが作成できましたら、ローカルリポジトリを作成をしましょう。
現状で先ほど作成したAPpディレクトリはGitで管理されていません。
Gitで管理されているかどうかは、当該ディレクトリに.gitという隠しディレクトリが存在しているかどうかで判断することができます。

```:terminal
$ cd App名  #先ほど作成したAppディレクトリに移動
$ ls .git  #隠しディレクトリである.gitがあるかどうか確認
　ls: .git: No such file or directory
```
上記のようにそのようなディレクトリは無いとコメントされてますね。
それでは、.gitディレクトリを作成していきましょう。
新規で作成する場合は、"git init"と言うコマンドを使います。

```:terminal
$ git init  #当該ディレクトリをGitの管理下に置きます。
Initialized empty Git repository in /Users/username/projects/App名/.git/
$ ls .git  #隠しディレクトリである.gitがあるかどうか確認
HEAD  config  hooks  objects  refs
```

##2.リモートリポジトリ作成
ローカルリポジトリをGit管理下に置けましたので、続いてリモートリポジトリを作成していきましょう。

```:terminal
$ git push origin master
```
*git push origin masterは、今回のように初回のみ、もしくは個人で作成するときのみの使用としましょう。
*リモートリポジトリのmasterブランチにてコードレビュー無しで、直接pushできてしまうため、ソースコードが変わってしまいます。共同開発時には非常に危険なため、要注意です。

-origin:
リモートリポジトリの場所の別名です。他の名前をつけることも出来ますが、GitHubのリモートリポジトリに対してはoriginとすることが一般的です。

今回はローカルからリモートへのpushとしておりますが、先にGithubのWeb上で、リモートリポジトリを作成した後に、
ローカルリポジトリに紐付けする方法もあります。その時は以下のコマンドを使用してください。

```:terminal
$ git remote add origin  追加したいリポジトリ
```

##3.Git clone（他メンバー）
自身でリモートリポジトリに反映させている方は対応不要ですが、その他の共同開発メンバーの方は、
Gitcloneしてリモートリポジトリにあるデータをクローンしましょう。

```:terminal
$ git clone [クローンするソースコードのURL]
```
これで、準備完了です！
以降にて自身のローカルでの編集〜リモートリポジトリへのプッシュをしていきます。

##4.自身のブランチを作成
まずは自身の作業するブランチを作成します。

```:terminal
$ git checkout -b 作成するブランチ名
```

これで、ブランチが作成できましたので、これからこちらのブランチにて編集をします。
次の項にて編集後の内容のプッシュについて記載します。

##５.編集内容をインデックスへ格納＋コミット
編集した内容はまずインデックスに格納します。

```:terminal
$ git add (ファイル名) or git add .
```

```
$git status
 =>インデックスに追加されている変更修正、されていない変更修正を確認することができます。
```

-git add:
インデックスに追加して、変更修正記録の対象とすることができます。
-git status:
インデックスに追加されている変更修正、されていない変更修正を確認することができます。

それでは、格納した内容をコミットしましょう。

```:terminal
$ git commit -m "comment"
```

git commit：
インデックスに追加されている変更修正を、コミットするためのコマンドです。
イメージとしては、ローカルリポジトリにセーブをしているようなものです。
-mのオプションはコミットメッセージと呼ばれ、どのような変更を行ったのかメモを残せます。


##6.インデックスの内容をリモートリポジトリにプッシュ
それでは、リモートリポジトリにプッシュしましょう。

```
$ git push origin ブランチ名
```

-git push:
ローカルリポジトリでのコミットをリモートリポジトリ（origin）に反映させる操作ができます。
イメージとしてはインデックスでセーブしたデータをサーバーに保存しているようなものです。

これでリモートリポジトリへの反映ができました！
その他コマンドなどは参考に記載しておきますので、気になる方はご参照ください！

#参考
Gitコマンド一覧
https://qiita.com/fukumone/items/73e1a9a62c5e4454263b

基本的なGitコマンドまとめ
https://qiita.com/2m1tsu3/items/6d49374230afab251337#push

GitとGitHubを利用した共同開発の練習（コンフリクト解消まで）の備忘録①
https://qiita.com/shosugagoshu/items/ddecbb34f0ca0cd9a8f8

以上となります。最後までご覧いただき、ありがとうございました！
今後も学習した事項に関してQiitaに投稿していきますので、よろしくお願いします！
記述に何か誤りなどございましたら、お手数ですが、ご連絡いただけますと幸いです。