Fresopiya
場所にもお金にも時間にも、何にも縛られない自由な状態になったら一体人間は何をしてどこに向かうのか。

まずはとにかく自由を目指すエンジニアのブログです。
「哲学」と「プログラミング」と「政治経済」、「ブログ」がメインになるかと。
Git

【Git】Gitとは?Gitの仕組みとその解説。

どうも、とがみんです。

プログラミングをする人にとって、「Git」というソースコードを管理するシステムは欠かせないものだと思います。

とがみんも、「Git」を利用しているのですが、なかなか、その仕組みを理解することって難しい、、、と思ったりします。

なので、しっかり「Git」を理解するためにも、これから、「Git」についてまとめたことをどんどん記事にして、アウトプットしていきます。

この記事では、「Git」とは何か。その仕組みについて、簡単に紹介していきます。

Gitとは?

「Git」とは、プログラムのソースコードなどの変更履歴を記録、追跡するための分散型バージョン管理システムのことです。

みなさんは作成したファイルをどのように管理しているでしょうか。

プログラムを書く際、少し書き換えたら、エラーが出てしまい、編集前の状態に戻したいとか思ったことはあるでしょうか。

そんな事態に備えて、編集前のコードをバックアップしたりすると思います。

そして、以下のように、日付や変更内容をファイル名に書き込んで、

編集前の状態を保存してから、変更を加えていき、

上手く動作したら、名前を付け直して保存するというようなことをしていた人もいるかもしれません。

このように、自分でファイルをコピーして編集して保存といった作業は結構大変で、ミスも起こしやすいです。

また、もし何かをチームで開発することになった際、このやり方だと、

  • 同じファイルを誰かと同時に編集していた場合、どちらかのコードが消えてしまう。
  • 誰がどの部分のコードを変更したのかといった詳細を知ることが難しい。

といった問題が挙げられます。

そこで、「Git」という分散型のバージョン管理のシステムが、こういった問題を解決するために作られました。

次に、もう少し詳しく、Gitの仕組みについて説明していきます。

Gitの仕組み

次にGitがどのように、ファイルを管理しているのかについてです。

ざっくり下図のような感じです。

上図の「リポジトリ」とは、ファイルを保存しておくためのデータベースです。

「ローカルリポジトリ」は、各PCにあるリポジトリのことで、

「リモートリポジトリ」は、複数名で開発する際に共有で利用するリポジトリのことです。

「ブランチ」とは、プロジェクト本体に影響を与えず複数人が同時並行で開発を行えるようにする機能のことで、詳しくは、別の記事で紹介します。

上図の①〜④の流れを説明していきます。

① add

「add」とは、次のcommitに備えて、作業ディレクトリ内の変更をステージングエリア(インデックス)に追加します操作のことを言います。

② commit

「commit」はステージングエリアに追加された作業ディレクトリ内の変更を、ローカルリポジトリに記録します。

このとき、変更内容をコミットメッセージとしてメモしておきます。

変更内容を、いきなりcommitするのではなく、ステージングエリアに追加しないといけない理由について、

作業ディレクトリで大量に変更した時に、コミットメッセージにそぐわない変更が含まれないように、commitに含めたい変更を選別するためです。

③ push

「push」は、ローカルリポジトリの内容を、リモートリポジトリに反映させる操作です。

リモートに反映させることによって、他の人もソースコードを見ることが可能になります。

④ fetch or pull

「fetch」「pull」も、リモートリポジトリから最新の変更履歴をダウンロードしてきて、ローカルリポジトリを更新する作業です。

「fetch」も「pull」も、リモートリポジトリから最新の変更履歴をダウンロードしてきて、ローカルリポジトリを更新する作業です。

ただ、「fetch」は、作業ディレクトリには反映されないので、反映させるためには「marge」する必要があります。

「pull」の場合は作業ディレクトリの変更も同時に行ってくれます。

まとめ

Gitの概要について説明しました。

コードの管理やチーム開発をする際は非常に有用なので、しっかりと勉強する必要がありますね!

また、何か不明点等あれば、ご指摘いただけると嬉しいです。

参考文献

>Gitを使ったバージョン管理|サルでもわかるGit入門

>まずはGitの仕組みを理解することから

>git push の反対は git pull ではない

>git fetchとは