GitHubを使ってみる

#初めてGitHubを使用してみる

##GitHubとは何か
https://www.sejuku.net/blog/7901
・自作のプログラムを専用サーバーにアップして、全世界に公開できるWebサービス
・共同開発に使用するバージョン管理システムとして使用する
・Gitの機能を用いて上記の内容を可能にする

現状はGitやGitHubの使用経験はないが、業務上はSubversionでバージョン管理を行っているため、なんとなくイメージがつく程度の経験

参照URLを読み進めると以下の方法でファイルを管理する
＊＊＊＊＊＊＊＊＊＊＊＊＊＊[GitHubの機能]＊＊＊＊＊＊＊＊＊＊＊＊＊＊
1. プロジェクト管理者が書いたコードがGitHubのリポジトリーサーバーにアップロードされる
2. 共同開発者はローカル環境にGitHubのリポジトリーに配置されたプロジェクト管理者のコードをローカル環境に落としてくる(Pullという)
3. ローカル環境でコードを修正/追加してGitHubのリポジトリーにアップロードする(Pushという)
4. アップロードする際は、変更されたプログラムが問題ないかプロジェクト管理者が確認を行えるように共同開発者はプロジェクト管理者に対して確認依頼を出す(Pull Requestという)
5. プロジェクト管理者は、プルリクエストを受けて修正/追加されたコードをGitHubで確認し、
      問題がなければ現在のリポジトリー上のコードを変更された最新のものにする(Mergeという)

大まかな流れは上のようになるらしい
ちなみにこちらのサイトを参考にさせていただきました。
非常に丁寧に説明されているため、このサイトだけで基本的な概念は理解できる
https://employment.en-japan.com/engineerhub/entry/2017/01/31/110000




##導入の流れ

###GitHubにアカウントを作成する
GitHub公式ホームページでアカウントを作成する

https://github.com/

GitHubで使用するユーザー名[Username]
メールアドレス[Email]
パスワードを登録する[Password]

![スクリーンショット 2019-11-03 22.59.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/166e4ff3-fba9-ea98-56e3-8630d91e68bb.png)


無償の個人向け開発用を使用する(Freeを選択

![スクリーンショット 2019-11-03 23.03.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/6af68285-7647-e849-063c-7f027fb14884.png)

いろいろ質問を記入していくと、最終的にメールアドレスを確認するよう促される

![スクリーンショット 2019-11-03 23.04.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/82a60d84-fa4f-622e-7544-f03baf09411b.png)


登録したメールアドレスに届くメールからURLアクセスすると、
プロジェクト管理者用の専用リポジトリを作成する画面が表示される

リポジトリー名を決める[qiita]
一般公開用としてpublicを選択

![スクリーンショット 2019-11-03 23.08.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/b809e21f-d776-2555-65cf-a5c36ee32b99.png)

リポジトリーが作成された
このGitHub上の一般公開リポジトリーを使用して開発を進める

![スクリーンショット 2019-11-03 23.10.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/c121fbc0-1c41-5d78-8234-90f05eefc3ca.png)



###ローカル環境でGitを使えるようにする　
GitHubにアクセスするにはGitの機能が必要なため、ソフトウェアをインストールする
ちなみに、MacOSの場合は標準でインストールされているみたい
Gitがインストール済みであることを確認

```
git --version
git version 2.15.1 (Apple Git-101)
```


導入されていない場合は、下記のサイトを参照していただき、インストールする
https://tracpath.com/bootcamp/git-install-to-mac.html

Git上で使用するユーザー情報を定義する

```
git config --global user.name "ktkt11122334"
git config --global user.email  yourmail@addres
```


登録情報の確認

```
git config --list
user.name=ktkt11122334
user.email=yourmail@addres
・・・・
```

###GitHubにアクセスするためのsshの設定を行う
sshで使用する公開鍵と秘密鍵を生成
この辺りがよくわからない方はLPICの資格書などを参照された方がいい
ただし、GitHubに公開するだけなら理解する必要はなく、コマンド操作を行えば良い

```
ssh-keygen -t rsa -b 4096 -C "your@mailaddress"

cd /Users/* your user directory */.ssh
ls
id_rsa		id_rsa.pub
```

※id_rsaが秘密鍵、id_rsa.pubが公開鍵
秘密鍵は他ユーザーからの参照/書き出しが行える状態だと使用できない
ユーザー権限を変更する

```
chmod 600 ~/.ssh/id_rsa
```

GitHubにsshでアクセスする際の設定値を設定
cd /Users/* your user directory */.sshにconfigファイルを作成し、
下記のデータ入力を行う

```
vim ~/.ssh/config
Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa
```

上記は
ssh github とコマンド入力すると[github.com]サーバーにユーザー名gitでアクセスするという意味である

sshでリモートログインを行うには、認証としてローカル環境に公開鍵/秘密鍵
リモートサーバー環境に公開鍵を配置する必要がある

次の手順でGitHub上に公開鍵を登録する

```
pwd
cd /Users/* your user directory */.ssh

vim id_rsa.pub
[公開鍵テキストデータ]
```

公開鍵テキストデータをコピペしてブラウザのGitHub ssh設定画面に貼り付ける

![スクリーンショット 2019-11-03 23.11.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/e7839a67-903f-bfff-d357-1b1a01d5beaf.png)

![スクリーンショット 2019-11-03 23.11.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/2c642ab0-569b-3f21-4781-7594f5b63f7a.png)

![スクリーンショット 2019-11-03 23.12.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/b72881ea-c041-8838-6d41-29aea8550328.png)


[Title] 任意の値
[Key] 公開鍵のテキスト内容

これでGitHub上に公開鍵をセットできた
Githubにsshでリモートアクセスしてみる

```
ssh github
Hi ktkt11122334! You've successfully authenticated, but GitHub does not provide shell access.
```

認証は成功したが、GitHubサーバーにはシェルコマンドでのアクセスを提供していないとのこと
つまり、これで成功


###GitHubを使用する
・GitコマンドでGitHubのリポジトリーをローカルリポジトリーにクローンする
Gitを使ってローカル環境で開発を進めるディレクトリを任意のディレクトリに作成する

```
mkdir git
cd git
```

GitHubで作成したリポジトリ名をコピーする
Code項目のssh欄でコマンドをコピー　Macのターミナルで実行
これで先ほど作成したgitフォルダの中にリポジトリーのクローンが作成される

![スクリーンショット 2019-11-03 23.48.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/2cbbaaa0-6396-19f8-6527-291b7040118a.png)

```
git clone git@github.com:ktkt11122334/qiita.git
ls
qiita

cd qiita
```

ローカル環境で開発を進めるには、ローカルでの最新コードをmasterブランチとして扱い、作業用ブランチは別に作成する

GitHubリポジトリーでの最新のコードはローカル環境でのmasterブランチに設置され、
masterブランチから開発を進めるには、作業用ブランチを作成して作業用ブランチの中で開発を進める

作業用ブランチで対応中の開発が終了した時点でGitHubリポジトリーのmasterブランチに同期する
開発の区切りとして、ローカル環境からGitHubリポジトリーに最新のコードをアップデートする際にこの作業用ブランチをGitHubリポジトリーに同期する


流れとしては、多分下記のようになる
共同開発者がGitHubのmasterブランチから最新コードをローカルリポジトリーのmasterブランチに落とす(Pull)
↓
ローカルのmasterブランチに対して作業用ブランチを作成する
↓
作業用ブランチで開発を進め、一区切りつくとGitHub上のリポジトリーに作業用ブランチをアップする(Push)
↓
GitHub上の作業用ブランチからGitHub上のmasterブランチに対してプルリクエストを送る
↓
プロジェクト管理者がGitHub上の作業用ブランチの内容を確認し、
内容に問題がなければGitHub上のmasterブランチに同期する
これで共同開発者が修正/追加したコードがGitHub上のmasterブランチに反映される
↓
GitHub上に同期された作業用ブランチは、以後不要のため削除する
↓
最初に戻る

ブランチについての詳細はこちら
https://backlog.com/ja/git-tutorial/stepup/02/




ローカル環境の作業用ブランチ(branch-for-work)を作成する

```
git branch branch-for-work

 Not a valid object name: 'master'.
```

エラーが出てしまった
クローンを作成した時点でmasterブランチがなぜか存在しない
masterブランチがない場合は、作業用ブランチを作成できないようだ
こちらで対応
https://github.com/kajiwara22/AppDevelopUseOfWeb/blob/master/10.md

```
git commit --allow-empty

———————適当な文字を記入して:wq!でデータを保存———————
for create master branch

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
————————————————————————————————
```

再度、branchを表示

```
git branch
* master
```

masterブランチが作成されていることを確認
作業用ブランチを作る

```
git branch branch-for-work
git branch
  branch-for-work
* master
```

よかった　作業用ブランチが作成できた
※印が開発対象としているブランチを指す

開発対象用のブランチを作業用ブランチに切り替える

```
git checkout branch-for-work
Switched to branch 'branch-for-work'

git branch
* branch-for-work
  master
```

先日作成したメール送信用のプログラムを作業用ブランチに配置する
Jarライブラリとソースコードをもってくる

```
mv ../../JavaMail_commit/lib .
mv ../../JavaMail_commit/src/ .
ls
lib	src
```

次に配置したコードをバージョン管理対象にする
addすると新規に作成された管理対象ファイルとしてGitが認識する

```
git add lib
git add src
```

コミットする。
ローカル環境において、コミットすると修正/追加されたコード(ファイル)がローカルリポジトリーで最新のものになる
詳細はこちら
https://backlog.com/ja/git-tutorial/intro/03/


コミット対象を表示確認

```
git status
On branch branch-for-work
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   lib/javax.mail-1.6.2.jar
	new file:   src/JavaMailClients.java
	new file:   src/mail_builder/SendMail.java
```

コミットする

```
git commit -a
—————————————vimでテキスト記入 コメントを入力—————————————
 new create java files on local environment

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch branch-for-work
# Changes to be committed:
#       new file:   lib/javax.mail-1.6.2.jar
#       new file:   src/JavaMailClients.java
#       new file:   src/mail_builder/SendMail.java
—————————————————————————————————————————

[branch-for-work 85399e4]  new create java files on local environment
 3 files changed, 165 insertions(+)
 create mode 100755 lib/javax.mail-1.6.2.jar
 create mode 100755 src/JavaMailClients.java
 create mode 100755 src/mail_builder/SendMail.java
```

git statusで現在修正中のファイルがないことを確認

```
git status
On branch branch-for-work
nothing to commit, working tree clean
```

これでローカル環境でのコードファイルは最新のものが扱われる

GitHubにPushしてGitHub上のリポジトリに反映させる

```
git push origin branch-for-work
```

GitHubのGUIでプッシュしたファイルが表示される

![スクリーンショット 2019-11-04 0.52.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/3ab627b0-45be-671a-691b-5036d4e60c47.png)


GitHub上のmasterブランチに作業用ブランチからプルリクエストする

現在、初期設定の段階でローカル環境のブランチにmasterブランチが存在しなかった。
GitHubリポジトリーのmasterブランチが存在しないため、
Pullを行なっても、ローカル環境上でmasterブランチが作成されなかったと考えられる

masterブランチは開発のメインラインとなるため、あらかじめGitHub上に設置しておく

```
git checkout master
git push origin master
```

これでGitHub上にmasterブランチがPushされたはず

下記の画面でいうdefaultブランチが事実上のmasterブランチだと思われる
Change default branchよりmasterブランチを設定する

![スクリーンショット 2019-11-04 1.24.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/bdac0d42-fc52-b269-778a-825f8e2771ea.png)

![スクリーンショット 2019-11-04 1.27.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/48f509f9-c3e8-84ba-cd69-b54679bb289b.png)

![スクリーンショット 2019-11-04 1.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/88136931-b637-006c-01e4-0a97f8a6eb23.png)


おそらくこれでいいはず

次にGitHub上にアップロードした作業用ブランチからmasterブランチにプルリクエストする

New pull requestの画面で必要事項を記載してプルリクエストをクリック

![スクリーンショット 2019-11-04 1.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/88136931-b637-006c-01e4-0a97f8a6eb23.png)

![スクリーンショット 2019-11-04 1.31.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/1b715154-7d5c-ba22-e1c9-0e3403f38995.png)
 
Pull requestsタブから詳細を表示
Files Changesでどのような変更があったか、差分が確認できる模様

![スクリーンショット 2019-11-04 1.33.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/cdca2fd9-8dc3-2daa-ab98-15e4fe36fbf0.png)

内容に問題がなければ、プロジェクト管理者がプルリクエストについてのコメントを記入してCommentをクリック

![スクリーンショット 2019-11-04 1.35.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/5c1177df-5428-c051-f100-3ff789f1772b.png)

Merge pull requestで作業用ブランチからのブルリウエストを受けてmasterブランチにその内容を反映させる

![スクリーンショット 2019-11-04 1.36.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/90acbf84-d62a-bcea-6837-59a93a3ed606.png)

GitHub上の作業用ブランチは不要になったので削除する

![スクリーンショット 2019-11-04 1.38.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526203/c502fae4-9816-d583-b4cf-cdf14b34c08c.png)



最後にローカル環境上で不要となった作業用ブランチを削除する

現在のbranchの確認

```
git branch
  branch-for-work
* master
```

ローカル環境のmasterブランチを最新のものにする
GitHubと同期

```
git pull
```

先ほど追加したGitHub上のmasterブランチに配置されるjavaファイルがローカル環境上のmasterブランチに配置される

ローカル環境の作業用ブランチを削除

```
git branch -d branch-for-work
deleted branch branch-for-work (was 85399e4).
git branch
* master
```



以上でGitHubとGitを使用した主要なバージョン管理は終わりであるが、
正しい使い方か不明なため、今後も使用しながら慣れていくことにする

本記事で扱っていないローカル環境のmasterブランチへ作業用をbranchをマージする方法など
下記の記事を参照ください。
非常わかりやすく説明されています。
https://qiita.com/yukiyoshimura/items/7aa4a8f8db493ab97c2b

とりあえず、開発環境ができてきたので週一くらいでQiitaに何か投稿できたらと思います。
GitHubアカウントはこちら ktkt11122334
以上