inglow Blog

Tech Blog
エンジニアブログ

Githubの利用

2020.09.10

このエントリーをはてなブックマークに追加

こんにちは!

今回はチームで開発するにあたって広く利用されているGithubについて紹介したいと思います。実際に使用するコマンドなどはたくさん情報が出回っていると思うのでそれ以外の分かりづらかった部分を紹介できればと思います。自分も初心者で使い方がわからず、戸惑ったため、少しでも初心者の方の助けになれば幸いです!

Githubとは

耳にしたことはあると思いますが、そもそも何なのかを説明します!

当たり前と思われる方もいらっしゃるかと思いますが、gitとGithubは別物です!(初めて聞いた時は僕には衝撃でした笑。。。)

gitとはプログラミンなどを用いた現場でよく用いられている「分散型バージョン管理システム」です。gitは各ユーザのワーキングディレクトリに全履歴を含んだリポジトリの完全な複製が作られ、オフラインの環境でも履歴の変更や調査といったほとんどの開発作業を行う事ができます。

githubはそのGitの仕組みを利用して世界中の人々が自分の作品(プログラムコードやデザインデータなど)を保存公開する事ができるようにしたウェブサービスの名称です。github社により運営されていて、個人・企業誰でも無料で利用する事ができます。作成されたリポジトリは基本的には全て公開されますが、有料サービスを利用すると指定したユーザーのみがアクセスする事ができるプライベートリポジトリも作成する事ができます。

なぜgitを使うか?

分散型であるため、コミットしてもすぐには他の人に影響を与えないため、自分のタイミングでコミットする事ができ、チーム開発に向いています。

また、コミットする頻度を適切にする事でコードレビューの負担も大きくならない事が挙げられます。

この二つはバージョン管理システムであるSVNにはないメリットです。

実際の開発の流れ

それではGitを使っての実際のソースコード管理の基本的な流れを簡単に説明します。

1.リポジトリを作成する
2.ソースコードの作成、編集を行う
3.新規作成、変更、削除をGitのインデックスに追加する
4.インデックスに追加された内容をローカルリポジトリにコミットする。
5.ローカルリポジトリの内容をリモートリポジトリ(GitHub)にプッシュする

2.で登場する「インデックス」は、ローカルリポジトリにコミットする前に一時的に変更内容を保存しておく場所です。ファイルを編集し、最終的にGitHubに変更が反映されるまでにはインデックス→ローカルリポジトリ→リモートリポジトリ(GitHub)という3段階を踏むようになっています。

また、ローカルリポジトリに変更内容をアップすることを「コミット」、リモートリポジトリに変更内容をアップをすることを「プッシュ」と呼びます。逆に、他の開発者がリモートリポジトリに追加した内容をローカルリポジトリに反映させる操作は「プル」と呼ばれます。

こうして複数の開発者がリモートリポジトリに最新の状態をプッシュしていき、ソースコードのバージョン管理を行います。

それぞれのコマンドでどのようにブランチが変化しているのかがよくわからないという方向けに、下記サイトを紹介します。このスライドはバージョン管理がどのような仕組みで行われているのかがかなりわかりやすくまとめてあります。

SourceTree

gitの操作ができる無料のデスクトップアプリケーションとしてソースツリーがあります。全てコマンドで操作していくCUI形式ではなく、ぽちぽちクリックしながら視覚的に操作していくGUI形式でGitを使えるツールです。こちらの記事で使い方を簡単に紹介していますので参考にどうぞ!

最後に初心者がつまづくであろう用語がたくさん出てくるので簡単いまとめておきました!

word        meaning
repositoryファイルや変更履歴を保管する場所
ローカルリポジトリ(自分のパソコン上)
リモートリポジトリ(Webサービス上)
worktree編集したファイルが自動的に保存される場所(※コミットの対象でない)
index編集したファイルを仮確定して置いておく場所(※コミットの対象になる)
ワークツリーとリポジトリの間
remort共有ファイルの置き場所
commit変更履歴の保存
Fork他の人が公開しているリモートリポジトリを自分のアカウントにコピー
Cloneリモートリポジトリをローカル環境(自分のパソコン)にコピー
branch履歴の流れを分岐して記録する際に使用
分岐したブランチは他のブランチの影響を受けない
同じリポジトリ中で複数の変更を同時に進められる
mergemasterから分けたブランチを統合・合体させる
Pushローカルリポジトリからリモートリポジトリへアップロード   
pullリモートリポジトリからローカルリポジトリへデータをダウンロード   
pull request「プルリク」、「PR」と略される
自分のパソコンで開発したソースコードをリモートリポジトリにプッシュした後に変更内容を他の人にコードレビューしてもらい、masterに追加しても良いか確認
revertコミットの削除ではなく、反対の内容で新規コミットを作ることで過去の変更を打ち消す
rebase履歴が枝分かれせずに一直線となる
squashコミットを一つにまとめる
fetchリモートリポジトリから更新内容をダウンロードし、ローカルリポジトリ内のリモート追跡ブランチを更新(※マージした時にローカルリポジトリが更新される)
stash未コミットのファイルを一時退避
cherry-pickコミットしたブランチを別のブランチへ変更

Related Blog
関連記事

2020.09.22
道路標識イラストをCSSで作ってみた
2020.09.15
cssだけでルーレット作ってみた