「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Mini-git、ファイルが Git オブジェクトにどのように保存されるかを理解する

Mini-git、ファイルが Git オブジェクトにどのように保存されるかを理解する

2024 年 8 月 24 日に公開
ブラウズ:413

Mini-git, Understanding How Files Are Stored in Git Objects

昨日、私は Git の中核機能の 1 つ、具体的にはファイルの保存方法、Git オブジェクトとは何か、ハッシュと圧縮のプロセスを自分で実装することにしました。開発には 4 時間かかりました。この記事では、私の思考プロセスとアプローチについて説明します。

ファイルをコミットするとどうなりますか?

Git でファイルをコミットすると、内部でいくつかの重要な手順が実行されます。

ファイル圧縮:

ファイルのコンテンツは、サイズを減らすために zlib アルゴリズムを使用して圧縮されます。この圧縮されたコンテンツは、Git オブジェクト データベースに保存されます。

ハッシュ計算:

圧縮ファイルの内容から一意の SHA-1 ハッシュが生成されます。このハッシュは、Git オブジェクト データベース内のファイルの識別子として機能します。

オブジェクトの保存:

オブジェクト ファイルは、ハッシュの最初の 2 文字で編成されて .mygit/objects ディレクトリに保存されます。この構造により、オブジェクトの管理と効率的な取得が容易になります。
コミット情報を更新中:

ファイルが git にどのように保存されるかを示すため。
1つのファイルを考慮してコミット機能を実装しました

  1. すべてのファイルについてハッシュを計算しました
  2. オブジェクトフォルダー内に、ハッシュの最初の 2 文字に等しい名前で新しいフォルダーが作成されます。
  3. そして、残りのハッシュを名前としてそのフォルダー内にファイルが作成されます。(このファイルにはコミットされたファイルの圧縮形式が保存されます)
  4. 新しく計算されたファイルのハッシュと最後に計算されたファイルのハッシュを比較することで変更を検出しました

変化の検出

このアルゴリズムは独自のアプローチに基づいて実装しましたが、Git ではこれらの操作により効率的なアルゴリズムが使用されます。

  1. oldContent と newContent から抽出された行の配列
  2. 行をキーとして、インデックスを値として保存するマップを作成しました
  3. oldContent と newContent に共通行のインデックスを格納する 2 つの新しい配列を作成しました 4.例: OldCommonarray = [0 , 3] の場合、削除された行は [1,2]
  4. になります。

GitHub リポジトリ
リンクトイン

お時間をいただきありがとうございました。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/keerthivardhan1/mini-git- Understanding-how-files-are-stored-in-git-objects-5bfb?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3