🎉

Git使い方講座 〜その1(Gitの概要) 〜

2022/11/24に公開

Gitとは?

バージョン管理ツールの一つ

「分散型バージョン管理システム」と呼ばれるシステムであり、ファイルの変更履歴を管理するシステムである。
 大体の動作の模式図を図1のようになる。


図1:Gitの仕組みを模式化した図(1)

バージョン管理システムでは一般に、ファイルのある時点での状態を保存することを「チェックイン」、過去の状態を取り出すことを「チェックアウト」と言う。
(なお、Gitでは「チェックイン」のことを「コミット」と呼ぶ。)
 また、このチェックイン(コミット)を保存する場所を「リポジトリ」と言う。

Gitの仕組み

ディレクトリ(WindowsやMacではフォルダと呼ぶ)は木に似た構造となっており、この、『根』と呼ばれる基準となるディレクトリからを下に連なるディレクトリ群を、「ディレクトリツリー」と呼ぶ。
Gitでは、これを任意のディレクトリ(フォルダ)を『根』とするディレクトリツリーを基準にバージョンを管理している。

Gitでは初期化を行ったとき、「根」の下に.gitと言うgitが管理するディレクトリが作られ、ここに「ステージ」と「リポジトリ」が格納・管理される。


図1:Gitの仕組みを模式化した図(2)

ステージ」とは作業中のディレクトリツリー(これをワーキングツリーと呼び、以降そう呼称する)とリポジトリの間にある領域であり、ユーザはリポジトリにバージョンを保存する前にこの領域にバージョンを一時保管する。
 このステージにバージョンを保存することを「ステージする」という。
 コミットする際はこのステージを経由しなければ、リポジトリにバージョンを保存することは出来ない。その逆も同様である。


 gitは特に「分散型」と言われるとおり、リポジトリをプロジェクトに応じて複数設置することが可能である。
 バージョン管理システムとして他に代表的なシステムとして「Subversion」というものがあるが、こちらは「集中型」と呼ばれる。
 下図3はSubversion、下図4はgitのリポジトリ構造を表したものである。


図3:Subversionのリポジトリ構造図


図4:Subversionのリポジトリ構造図

<引用元↓>
https://www.ricksoft.jp/blog/archives/9483/

上図のように、subversionではワーキングツリーと別の場所(多くはサーバ)に設置されたたった一つのリポジトリが集中的にソース、バージョンを管理する。

対してgitは、サーバとは別に自信の作業環境(ワーキングツリーと同じフォルダ)にもリポジトリを設置することができ、自身のローカル(つまり、PC)でもバージョン管理が可能である。このようにリポジトリが分散して存在、管理されていることがgitの特徴であり、gitに存在するリポジトリの内、ローカルにあるリポジトリを「ローカルリポジトリ」、サーバなど自身のローカルにないリポジトリを「リモートリポジトリ」と呼ぶ。

リモートリポジトリは別名「裸のリポジトリ」と呼ばれる事もあり、ワーキングツリーやステージを持たず、開発者がリモートリポジトリのある環境で開発を行うことはない。

なお、図4に示すようなネットワーク図は一例であり、リモートリポジトリとローカルリポジトリの配置・数は柔軟に変更することができ、その時々のプロジェクトに最適化された環境に構築される。

gitの操作方法

基本として、gitはCUIツールである。

CUIツールとは、コンピュータやソフトウェアが利用者に情報を提示したり操作を受け付けたりする方法(UI:ユーザーインターフェース)の類型の一つで、すべてのやり取りを文字によって行う方式である。一般的に使われる、GUIツール(コンピュータの表示・操作体系(ユーザーインターフェース)の分類の一つで、情報の提示に画像や図形を多用し、基礎的な操作の大半をマウスやタッチスクリーンなどによる画面上の位置の指示により行うことができる方式とは異なり、特定のウインドウを持たず、シェル(Wiondowsではコマンドプロンプト、もしくはPowershell、Macではターミナル)を通して使用するツールである。

基本的に

$: git push
$: git init

等のコマンドを通して、gitを操作する。

gitは非常に有用なツールではあるが、非常に扱いが難しいツールでもある。そのため、慣れるまでは上記のGUIツールを使用しながら慣れることで視覚的に理解できるため学習に有用である。

Discussion