見出し画像

5歳でも分かる? gitの仕組みと使い方

こんにちは、小林です。
 今回は、チーム開発などでよく使われるバージョン管理システムのgitについて説明します。
 自分も最近gitを本格的にチーム開発で使うのですが、チーム全員がgitをわかっていないと思わぬところでコードが消えたりして困ることがあります。
なので、エンジニアを目指している方や初心者の方にぜひ読んでほしいです!
 細かいことはいいから使い方だけ知りたい!という方は「3、で、結局どう使うの?」だけ読んでいただければ良いかと思います。

※対象読者は初心者ですが、gitのインストールやリポジトリ作成はできる前提で話を進めます。そこまで入れるとちょっと長くなりすぎるので。

目次
1、gitって?
2、コマンドの種類とそれぞれの使い方
3、で、結局どう使うの?
4、まとめ

1、gitって?

 gitとは、バージョン管理システムです。あるファイルやファイル群の変更を記録し、後で特定のバージョンを呼び出せるようにするためのものです。
例えばwebページのコードに変更を加えているうちに見た目が崩れて戻せなくなることがあります。そんな時、崩れる前のバージョンを保持しておけば、それを呼び出し改めて開発作業に入ることができます。
 このバージョン管理システム、gitの前にもいくつか種類がありました。ローカル・バージョン管理システム、集中バージョン管理システムです。gitの理解のために、まずはこの2つを紹介していきます。
 
 ローカル・バージョン管理システムは、バージョン管理を行う対象のファイルの全ての変更を保持するというものです。(下図)
(チェックアウトは、特定のバージョンをコピーしてくることです。)

 これだけでも、何か問題が起こった時に過去のバージョンに戻って開発することができます。しかし、これはあくまで1つのコンピューター内での管理です。複数人での共同開発を行う場面では不十分でした。そこで集中バージョン管理システムが登場します。

 集中バージョン管理システムは、ファイルの変更に関する情報を全てサーバーで管理し、そこからローカルにファイルをチェックアウトするという形です。ローカルの変更もサーバーに保存します。(下図)

 これで複数人での開発に耐えられます。サーバー側に他者の変更が保存されていくため、プロジェクト内のメンバーがお互いどんな変更をしたかがある程度わかります。しかし、これでもまだ弱点があります。例えばサーバーが停止してしまった場合、その間はローカルの変更内容はサーバー側に保存できなくなります。そうなると他者の変更が自分に伝わってこないので、下手に作業をするとファイルの変更が競合する可能性が高いです。さらにサーバーのデータが破損する=プロジェクトのデータが失われるということになってしまいます。
 そこでいよいよgitが登場することになります。gitは分散バージョン管理システムに属します。これは、ローカルとサーバーに分かれている点は集中管理システムと同様ですが、ローカル側がファイルだけでなく変更に関する情報も持つ点が異なります。(下図)

 こうすることで、仮にサーバー側のデータが消失しても、ローカル側のどれかのデータをサーバーにアップロードしなおせば復旧することができます。

 ここまででgitの仕組みについて説明しました。続いて、gitのコマンドについて説明します。

2、コマンドの種類とそれぞれの使い方

 gitでは、データのやり取りは基本的に全てコマンドラインから行います。よく使うものを説明していきます。

・git clone
・git add
・git commit
・git pull
・git push

・git clone
 サーバー側のファイルや変更履歴を丸ごとローカルにコピーします。プロジェクト開始時に使うことが多いです。使い方は、「git clone clone用のURL」とします。任意のディレクトリ名をつけたい場合は後ろに続けてディレクトリ名をつけます。


git clone https://github.com/test_user/test

//こうすればmyprojectというディレクトリの中に保存される
git clone https://github.com/test_user/test myproject

・git add
 新しくファイルをgitの管理対象に加えます。例えばmyprojectディレクトリをgitで管理していて、開発中に新しいファイルを作成した場合に使います。ただファイルを作成しただけではgitの管理対象にならない(変更履歴が保存されていかない)ので、このコマンドが必要になります。使い方は「git add ファイル名」です。また、「git add -A」とすれば新しいファイルが複数あっても全て追加されます。


//RADEMEファイルが管理対象に追加
git add RADEME

//新しいファイルは全て追加
git add -A

・git commit
 ファイルに変更があった場合、その変更をローカル内の変更情報に追記します。この時点ではまだサーバー側に変更情報は伝わっていません。あくまでローカル側だけでの動作です。コミットを行う場合、どんな変更をしたかを明記することが基本になります。そのためgit commitコマンドを入力すると指定されたエディタ(特に設定をしていなければVimなど)が開いて何らかのメッセージ入力を要求されます。ただ、いちいちエディタが立ち上がるのも面倒なので、コマンドと一緒にメッセージを入力してしまいましょう。その場合は「git commit -m "メッセージ"」とすれば良いです。


//入力後エディタが立ち上がる
git commit

//メッセージを一緒に入力する
git commit -m "メッセージ"

・git push
 自分が行った変更をサーバー側に反映させます。

・git pull
 サーバー側の変更内容をローカル側へダウンロードし、ローカル側で持っている変更情報と合体させます。自分以外の誰かがgit pushをしていた場合にその変更分が反映されます。git cloneと違うのはデータを上書きするのではなく合体させる点です。仮に自分がまだpushしていない変更があっても、pullであればその変更を残しながらサーバー側の変更を取り込むことができます。
 共同開発の場合は同時に開発を進めるので、自分がpushする前に別の人がpushする場合があります。自分も続けてpushしようとしても、他者の変更内容を含まないままpushはできないので、このpullを間に挟んでからpushします。

3、で、結局どう使うの?

プロジェクト開始時(一番最初)
-git clone

開発作業開始時
-git pull

開発作業が終わり、サーバーに保存する時
-git add -A

-git commit -m "メッセージ"

-git pull

-git push

この順番で行えば、基本的に問題ないはずです。

4、まとめ

・gitとは、バージョン管理システム。複数人での共同開発で有用。
・コマンドによってデータのやり取りを行う。
・開発作業が終わり、サーバーに保存する時は
 -git add -A
 -git commit -m "メッセージ"
 -git pull
 -git push
 の順番でやれば良い。

でした。この記事を書くにあたって以下のサイトが非常に参考になりました。gitについてより詳しく知りたい方はそちらも参照していただければと思います。
https://git-scm.com/book/ja/v2

最後まで読んでいただきありがとうございました!

この記事が気に入ったらサポートをしてみませんか?