【Git】Git初心者がGitを説明してみる(入門)

Programming

 どのサイトを見てもGitがどういうものかわからない、もしくはわかりにくいという人も多いかと思います。プログラミングを趣味程度でやっている人は、構成管理自体せずに、コードを書いている人も多いかもしれません。
 私もちょっと触ったくらいで、完全には理解できていません。ただ、まったくの初心者が、ちょっとコミットしたりプッシュしたりする範囲であれば何となく理解しているので、それをなるべくわかりやすく解説していきます。他のサイトよりも専門用語少な目でイメージを大切に直感的にわかるように説明していきます。今回大事にする用語は

  • リポジトリ
  • コミット
  • マージ
  • PUSH
  • PULL

 の5つです。これで最低限、Gitを使うことができます。

Goal

レポジトリ、コミット、マージ、プッシュ位を理解してGitを触れるようになる!




そもそも構成管理って?

 Gitって何?という方もいるかと思います。構成管理とは何かもわからない方もいるかと思います。

 簡単に言うと、構成管理とはソースコードの変更をちゃんと追えるように管理することです。Gitとはそれを達成するためのツールです。

ファイルのバージョン管理

 学生の頃、研究などでプログラミングをしたことがある人もいるかと思います。作成したコードはPCのHDDや学校の共有サーバーで保管したのではないでしょうか?修正したファイルは上書き保存して常に最新の一つのファイルを保管するようにしています。

 上記の例で、version1.2がうまく動かなかったとします。version1.0に戻して動かしてみたい時、上書き保存されてしまうと、まったく同じファイルに戻すのは苦労するでしょう。無尽蔵に暇な時間のある学生であれば、もう一度version1.0を作成することも可能かもしれません。ただ、社会人は時間に限りがあります。また、正しく全く同じコードではなく、感覚で戻していては、また別の問題に出くわす可能性もあります。

 そういった状況を回避するために、修正したコードはきちんと順序立てて変更を管理します。

 これが構成管理の目的の一つ、バージョン管理です。

複数人で開発する

 もう一つは複数人で一つのソフトウェアを開発する際にぐちゃぐちゃにならないように管理するために使います。例えば、以下のように共有フォルダに好きな人が好きなようにコードを保存したらどうなるでしょうか?

 AさんはBさんのversion1.1をversion1.0で上書き保存してしまうかもしれません。大事なファイルを誰かに消されてしまうかもしれません。そして、そのことを後から調べることも容易ではありません。

 こういった事態を防ぐために、誰がどういう変更をいつ施したか、時系列で管理するのも構成管理の目的の一つです。

Gitって何?

 構成管理を実現するためのツール、それがGitです。ソースコードを管理するための仕組みがいくつかあるのでまずはそれをご紹介します。この最低限の単語さえ覚えておけば、Gitを使うことはできます。

リポジトリ

 リポジトリとはソースコードを格納する箱です。この箱は いつ 誰が どのコードを 変更、追加、削除 したというのも時系列で覚えておいてくれます。リポジトリを一つにしておけば、みんなで好き勝手コードを入れても、どういう遍歴で変更されていったかが一目両全です。

ローカルリポジトリ(ノンベアリポジトリ)

 個人が自由に持つことができるリポジトリです。ある時点のリモートリポジトリのコピーをローカルリポジトリに持ってきて、各個人はこのローカルリポジトリに修正を入れていきます。ローカルなので、いくらやんちゃなことをやってもリモートリポジトリには一切変更は入らないので、安心です。

リモートリポジトリ(ベアレポジトリ)

 複数人で開発する際、みんながアクセスできるリモートに配置されたリポジトリで、各人がローカルリポジトリで開発したものをここへ追加(PUSH)していきます。このリポジトリは基本一つしかありません。

コミット

 コードを書いてエディタで保存するだけでは、構成管理の対象にはなりません。ローカルリポジトリに格納する必要があります。ローカルリポジトリに格納する行為をコミットするといいます。コミットしておけば、コミットしたタイミングのコードへはいつでも戻すことができます。

PULL

 リモートリポジトリのデータをローカルリポジトリに取り込むことです。リモートリポジトリの更新履歴のみを確認するfetchとデータを同期するmergeをセットで行ってくれます。

PUSH

 プッシュはリモートリポジトリに自分のローカルリポジトリの修正を取り入れることです。コミットと似ていますが、コミットは自身のローカルリポジトリに修正を入れることで、PUSHはみんなで使うリモートリポジトリに入れることを指します。

マージ

 リポジトリどうしを合わせることをマージといいます。例えば、以下のようにあるリモートリポジトリのファイルをPULLしてAさんとBさんが開発を開始したとします。
 AさんがPUSHすると、Bさんがベースとしているデータはリモートリポジトリの最新より古くなってしまいます

 そこで、Aさんが入れたリモートリポジトリの変更を取り込むことで、Bさんも最新のリモートリポジトリで作業できます。そのデータを取り込んで併合する行為をマージするといいます。

どんな感じでGitは使うのか?

 どんな感じでGitを使うのかを簡単に説明します。ブランチという概念はここでは触れません。ForkというGitのGUIツールの使い方はこちらにまとめています。

ベースを作ろう

 まずはベースとなるリポジトリを作ります。みんなが使うベースなので、もちろんリモートリポジトリに作成します。

 どのようなものをベースに使うかは、状況により異なります。例えば、前の製品のソースコードをベースにしたり、プロトタイプ開発である程度動くソースコードをベースにしたり、何かのリファレンスコードをベースにしたり、様々でしょう。

 大事なのはベースは開発メンバ全員がローカルリポジトリにコピーして使います。ビルドがpassし、できる限り安定しているものを採用するのが大事です。

ローカルリポジトリを作ろう

 リモートリポジトリにベースとなる環境がPUSHされたら、開発メンバは自分のローカルリポジトリを作成します。最初、ローカルリポジトリはからっぽの状態です。ここにリモートリポジトリをベースとしてコピーします。この操作をクローンといいます。

開発しよう

 各々、クローンした環境に対して、自分の開発すべき対象を変更していきます。変更は適宜、自身のローカルリポジトリにコミットしていきます。コミットはこまめにやるのが良いです。ちょっと戻りたいとか、予期せぬデータの紛失に対応するためです。

PUSHしよう

 自分が開発したものがある程度動いたらリモートリポジトリにPUSHします。マージのところで説明しましたが、PUSHするためには自分がベースとしているリモートリポジトリの環境が最新である必要があるので注意が必要です。最新になっていない場合はPULLして、再度ビルドや動作を確認することをお勧めします。

まとめ

 Gitの初心者が、初心者にわかるように構成管理とGitの概念について簡単に説明したつもりですが、いかがだったでしょうか?Gitって、用語やコマンドが多くて(イメージ)使い方も難しそう(イメージ)がありますが、最低限、これらの単語さえ押さえておけばGUIのツールで使う限り、余裕で使えてしまいます。使っていくうちに、新しい単語や機能を少しづつ理解していくのでよいと思いました。

 

コメント