竹の子エンジニア

30代から目指すエンジニアの日記

GitHubの使い方について

GitHubのアカウントは以前から登録しており、
GitHubに関して学びたいと思っていたものの手つかずだったため
暇な時間を利用してのメモ。
GitHubのアカウント登録については端折ります。

GitHubとは

自分の書いたコードを全世界に公開するサービス。
また、ブランチの管理などをすることができる。
有料版であれば、非公開設定をすることができる。

用語

 プログラムのソースコードなどのデータを保存しておく場所

 自分のPC上のリポジトリ

 GitHub上のリポジトリ

  • インデックス

 リポジトリにコミットする前の準備用のファイル。(直訳で目次)
 コードをコミットする前に、インデックスに変更した内容を追加する必要がある。

  • コミット

 インデックスの内容を読み取り、変更点をローカルリポジトリに登録する。
 コミットのコマンドを打たないと、クライアント環境で書いたコードなどは
 ローカルリポジトリにも反映されない。
 また、リモートリポジトリには反映されない。

  • プッシュ(送信)

 ローカルリポジトリにコミットした内容を、リモートリポジトリに反映させる。

GitHubにコードを公開するまでの流れ

クライアント環境で書いたコードをGitHub上に公開するまでの
流れは以下のとおりになります。

1. インデックスに追加
 クライアント上で変更した内容を、インデックスに追加する。
2. コミット
 インデックスの内容を読み取り、ローカルリポジトリにコミットする。
3. プッシュ
 ローカルリポジトリの内容をリモートリポジトリ(GitHub)にプッシュ(反映)する。

GitHubの操作方法

以上の内容をもとに、実際にGitHubと連携してみます。

リモートリポジトリを作成する

まず、GitHub上にリモートリポジトリを作成します。
GitHubにログインし、アカウント画像の左側の+ボタンをクリックし、
[New repository]をクリックします。

f:id:take9021:20181119100905p:plain

リポジトリの名前(Repository name)、
説明文(Description)を入力します。

公開範囲は有料版を購入しないとPrivateに設定できないため
Publicに設定します。

【Initialize this repository with a README】は、リポジトリの中にあらかじめ
READMEファイルを作成しておく場合に、チェックします。
この設定はあとから設定できるため、任意の設定を実施ください。
私はひとまず、チェックを入れ、Add .gitignore:None、Add a licens: Noneと
設定しております。

設定後、[Create repository]をクリックし、リポジトリを作成します。

f:id:take9021:20181119101249p:plain

リポジトリが作成されると、以下のように表示されます。
リポジトリ名と、説明文(description)が表示されることを確認します。

f:id:take9021:20181119134537p:plain

リモートリポジトリとの連携方法

リモートリポジトリを作成後、クライアント環境のコマンドラインにて
リモートリポジトリを操作できるよう設定します。

以下の操作はCentOSで操作しています。

CentOSにgitのインストール
すでにインストールされている可能性があります。

# yum install git
Githubリポジトリをclone

GitHubにあるリモートリポジトリをクライアント環境に
clone(複製)します。
GitHubよりClone用のURLを取得します。

緑色の[Clone or download]をクリックすると、
Clone用のURLが取得できます。
f:id:take9021:20181119130115p:plain

上記のURLを元に、CentOS上で以下のコマンドを実行します。

# git clone https://github.com/[ユーザーID]/[リポジトリ名].git

コマンドを実行すると、カレントディレクトリにリポジトリ名の
フォルダが作成されます。

変更した内容をインデックスに反映

上記でリポジトリの複製後、リポジトリのファイルを変更し、
その変更情報をインデックスに反映させます。
今回、新たにtextファイルを追加し、インデックスに反映します。

//hoge.textを作成
# touch hoge.text
//変更状況をインデックスに反映
# git add .
//変更内容を確認
# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   hoge.text
変更内容のコミット
git commit -m "<変更した内容を入力する>"
変更内容のpush(masterブランチに反映する)
# push -u origin master
Username for 'https://github.com': [GitHubのユーザー名を入力]
Password for 'https://username@github.com': [GitHubのパスワードを入力]
//ユーザー名:パスワードを入力すると以下のようなメッセージが表示されます。
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 265 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To https://github.com/[ユーザー名]/[リモートリポジトリ名].git
   a21171d..848282e  master -> master
Branch master set up to track remote branch master from origin.

以上を実施後、GitHubリポジトリを確認すると以下のようになります。
※commitした内容、回数などが増えていることを確認してください。
f:id:take9021:20181119134237p:plain

以上が、リモートリポジトリにpushするまでの操作方法になります。

ブランチについて

Gitではブランチという概念があり、
ブランチという単位でソースコードを分岐して記録していくためのものです。
ブランチを操作する場合は、以下の操作を実施します。

ブランチの作成
//branch1という名前でブランチを作成します。
# git branch branch1
//ブランチの表示 
//*がついている方が現在のブランチになります。
# git branch
  branch1
* master
ブランチの切り替え

ブランチを切り替える場合は、以下の操作を実施します。

//ブランチの切り替え
# git checkout branch1
//ブランチの表示
//*が切り替え先のブランチになっていることを確認します。
# git branch
* branch1
  master

ブランチを切り替えた後、試しにファイルを作成し
リモートリポジトリにプッシュしてみます。

//huga.textを作成
# touch huga.text
// インデックスに追加
# git add .
//コミット
# git commit -m "create huga.text"
//リモートリポジトリにプッシュ
# git push -u origin branch1

プッシュが完了すると、以下のように表示されます。
また画面上のbranchのプルダウンメニューよりブランチを切り替え
huga.textが表示されることを確認してください。

f:id:take9021:20181119141839p:plain

■おまけ
ブランチを元のブランチに切り替え、フォルダの中身を表示すると、
huga.textなどがないことを確認できます。

# git checkout master
Switched to branch 'master'
# ls
hoge.text  README.md
ブランチのマージ

分岐したブランチを一つのブランチに統合する場合は、以下の操作を実施します。

//統合する先のブランチに切り替える
# git checkout master
Switched to branch 'master'
//統合する元のブランチを指定し、ブランチを統合する
# git merge branch1
//マージされる内容が表示(huga.textの作成)
Updating 61de984..2e1bee7
Fast-forward
 huga.text | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 huga.text
//あとはいつもどおりpushする(commitなどは不要)
# push -u origin master

以上の操作を実施すると、branch1で変更した内容が
masterブランチでも反映されます。