fjordbootcampでのGit、Githubのプラクティスを進めているのですが、学ぶことが多くて、混乱しているので、学んだことを整理するための、GitとGithubについて単語を自分なりにまとめていきたいと思います。
Gitとは
バージョン管理のためのソフトウェアです。Gitの特徴として、リモートのリポジトリ(ファイルの保存場所)の内容をそのまま自分のパソコン(ローカル)にダウンロードして、作業ができるという点が挙げられます。
Gitが登場する以前はプロジェクトに必要なファイルが全て格納されたリポジトリがあり、それから作業する人がファイルをダウンロードし、作業を行い、作業が終了したら、そのファイルをリポジトリにアップするという方式をとっていました。
しかし、それでは全てのファイルが格納されたリポジトリのサーバーが落ちてしまったり、何らかの破損があったりすると、プロジェクトが大打撃を受けます💦要するに、一つの場所で、全てのファイルを管理するというのはリスクが高いのです。
そのような問題を解決したのが、Gitです。Gitのバージョン管理の仕組みはどのようなものかというと、リモートのリポジトリの内容をそのまま自分のパソコンに持ってこれるというものです。
これがどのような利点があるかというと、仮にリモートリポジトリがサーバーの不具合により使えなくなったとしても、自分のパソコンにリモートリポジトリの内容が入っているわけですから、作業が止まることはありません。 リモートリポジトリに何らかの破損があったとしても、自分のパソコンには破損前のバージョンが参照できるため、プロジェクトへの打撃を最小限で済ませることができます。
このように、Gitは、リスクを最小限にして、複数人での作業を可能にしたのです❗️
Githubとは
Gitを利用したWebサービスです。
Gitは、リモートリポジトリの内容を自分のパソコンなど(ローカルリポジトリ)に持ってきて、バージョンを管理することができますが、そのリモートリポジトリを提供してくれるサービスです。
また、「プルリクエスト」(後述)というGitにはない機能もあります。
ワークツリーとは
実際に作業しているディレクトリのことです。
コミットとは
ファイルの追加、変更をリポジトリに記録する操作を言います。
HEADとは
今、自分が作業している場所を表しています。このHEADは自由に移動させることができます。
プルとは
リモートリポジトリから、最近の作業内容(変更履歴)を自分のパソコンに引っ張ってくることです。
プッシュとは
ローカルリポジトリ(自分のPCなど)からリモートリポジトリに、自分の作業内容(変更履歴)を反映させることです。
ブランチとは
作業履歴を枝分かれさせて記録するものです。
例えば、あるプロジェクトを進めているときに、「〇〇という機能を実装したい」、「バグを修正したい」という状況になった時に、それを一本の作業履歴だけでやろうとすると、何か失敗してしまった時に戻ってくる場所がなくなってしまったり、複数人で作業を並行して進めにくくなってしまいます。
そのため、作業をする際には、一本の作業履歴上で行うのではなく、目的ごとに作業履歴を枝分かれさせて行います。そうすることで、戻ってくる場所を確保したまま、複数人で作業を行うことができるのです。
マージとは
ブランチによって、枝分かれさせた作業履歴を一つに統合する操作です。
コンフリクトとは
複数人で作業を行う時、自分がリモートリポジトリからプルして、作業した後にプッシュする間に、他の人がプッシュした際には、自分がプルした内容とリモートリポジトリの内容が異なってしまいます。
この状態で、プッシュしてしまうと、プッシュが拒否されてしまうのです。このように自分の変更履歴と、他の人の変更履歴が衝突してしまうことをコンフリクトと言います。
プルリクエストとは
Githubの機能の一つで、「こういう修正をしてみました。よければ反映してください」というものです。
複数人で開発を進める時、開発者が好きにpushをしてしまうとバグが発生しやすくなってしまいます。そこで、「ここを修正しました」と他の開発者に通知することで、他の開発者が「どれどれ🤔」と、そのコードを確認し、それが良かったら、マージするという手順を踏むことでバグを起こりにくくします。