見出し画像

ミニマルGitを自作しよう!

この記事は、KLab Tech Book Vol. 8 - 技術書典マーケットにて掲載された「第7章ミニマルGitを自作しよう」に調整・加筆を行なったものです。Haskell 言語での Git 自作チュートリアル記事はあまり見かけないコンテンツであり希少性が高いことを自負できると思っています。是非ご一読下さい。


0. 序章

今日、世界でもっとも広く利用されている分散バージョン管理システム(DVCS)はGitです。
このオープンソースプロジェクトは、Linuxカーネルの有名な作成者であるLinus Torvalds氏によって2005年に開発され、以降積極的に保守されています。いまやGitは当たり前のように使われているかもしれませんが、本書ではその一部コマンドを自作することで、内部で実際にどのような処理が行われているのか、理解を深めてみましょう。

扱う範囲

本章で扱うミニマルGitの実装例にはHaskellを使用し、Gitバージョン2.17.1を対象とすることとします。ここでいう「ミニマル」とは、初期化からステージング、コミットが行えることと定義します。
本章を通じて、各種Gitコマンドのうち、以下に記載のコマンドに相当する操作を自作のミニマルGitで行います。

$$
\begin{array}{c:c}
\hline
\textbf{コマンド} & \textbf{概要} \\
\hline
\text{add} & \text{ファイルの内容をインデックスに追加する} \\
\hdashline
\text{cat-file} & \text{リポジトリオブジェクトのコンテンツまたはタイプとサイズの情報を提供する} \\
\hdashline
\text{diff} & \text{コミット間、またコミットとワーキングディレクトリ間の変更差分を表示する} \\
\hdashline
\text{hash-object} & \text{オブジェクトIDを計算し、オプションによってファイルからblobを作成する} \\
\hdashline
\text{init} & \text{空のリポジトリを作成する} \\
\hdashline
\text{ls-files} & \text{インデックスとワーキングディレクトリ内のファイルに関する情報を表示する} \\
\hdashline
\text{status} & \text{ワーキングディレクトリの状態を表示する} \\
\hdashline
\text{commit} & \text{リポジトリへの変更を記録する} \\
\hline
\end {array}
$$

本章で扱われるサンプル実装の完全なソースコードは、下記からご覧いただけます。

ここから先は

28,412字 / 8画像

¥ 1,280

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