ホームページ  >  記事  >  開発ツール  >  git の基本的な処理フロー

git の基本的な処理フロー

王林
王林オリジナル
2023-05-20 09:11:07544ブラウズ

GitHub や GitLab などのコード ホスティング プラットフォームの人気により、Git はバージョン管理ツールとしてよく話題になり、Git がどのように機能するかを理解する人が増えています。ただし、Git の外観を理解することは、Git を使用することだけであり、Git を真に理解するには、Git の基本的な処理フローも理解する必要があります。

Git の基礎となる構造の概​​要

Git は、集中バージョン管理システム (SVN など) に対応する分散バージョン管理システムです。Git の分散的な性質のため、各 Gitリポジトリは完全なリポジトリです。

Git の作業ディレクトリには、Git ウェアハウス オブジェクトと作業ツリーの 2 つの部分が含まれています。Git ウェアハウス オブジェクトと作業ツリーのステータスは、それぞれエイリアス、ハード リンク、ソフト リンク間の関係に類推できます。

Git の基盤となるファイル ストレージ メソッド

Git の基盤となるファイル ストレージ テクノロジは、主に 2 つの側面に分かれています。

  1. オブジェクト ストレージ
  2. 圧縮可能なファイルの使用法format

オブジェクト ストレージ

Git はすべてのコード変更を個別のオブジェクトとして保存します。その中で、主要なオブジェクトは BLOB、ツリー、コミットです。このうち、blob はコード内容のスナップショット、ツリーはファイルとディレクトリのセットのスナップショット、コミットはコード変更のスナップショットです。

注意深い読者は、これらのオブジェクトが Linux システムの i ノード メカニズムに似ていることに気づくでしょう。inode ファイル ノードはファイルまたはディレクトリを表すことができ、inode ファイル ノードにはディスク ブロック番号などの情報が含まれます。 Git では、blob は i ノード ファイル ノード内のファイル コンテンツのスナップショット オブジェクト、ツリーは i ノード ディレクトリのスナップショット オブジェクト、コミットは複数の i ノード ファイル ノードで構成されるバージョン スナップショットです。

Git では、通常、オブジェクトは SHA1 ハッシュとして表されます。 SHA1 ハッシュ値は、40 文字の 16 進文字列です。 Git は SHA1 ハッシュを使用して、各バージョン、各ファイルとディレクトリ、および各コミットに一意の識別子を割り当てます。

圧縮可能なファイル形式の使用

Git の最下層では、コードの変更を処理するためにメタデータの一部をファイルに追加するテクノロジーが使用されています。メタデータは、2 つのコミット間の変更情報などの中間状態であることが多く、この情報は小さなファイルに圧縮でき、必要に応じて解凍できます。

Git で使用されるデフォルトのファイル形式は、packfile 形式です。 Packfile は、Git がクロスネットワーク操作を実行するときに転送するために、複数のオブジェクトを 1 つのファイルにアーカイブできる高圧縮の Git オブジェクト ストレージ形式です。

Git の基礎となるコア処理プロセス

前のコンテンツでは、Git オブジェクトと基礎となるファイル ストレージ テクノロジについて詳しく理解しました。次に、Git の基礎となるコア処理プロセスに入ります。

Git 初期化プロセス

  1. Create directory.git/
  2. Create subdirectory.git/objects/
  3. Create subdirectory.git/refs/
  4. 空の HEAD ファイルを作成する
  5. ##空のインデックス ファイルを作成する
  6. #Git の基本的なファイル コマンド

ここでは、まず Git について説明します。さまざまな基本的なファイル コマンド:

hash-object コマンド: ファイルを Git オブジェクトに変換するために使用されます。
  1. cat-file コマンド: Git オブジェクトの内容を表示するために使用されます。
  2. ls-tree コマンド: 特定の Git ツリーの内容を表示するために使用されます。
  3. update-index コマンド: Git インデックスにファイルまたはディレクトリを追加するために使用されます。
  4. write-tree コマンド: Git インデックスを Git ツリー オブジェクトに変換するために使用されます。
  5. Git の送信プロセス

Git の送信プロセスは、引き続き Blob、Tree、Commit の 3 つのフィールドで構成されます。

Blob: ファイル名、ファイルタイプ、そしてもちろん SHA1 ハッシュ値などを含む、コード内の各ファイルのメタデータを表すために使用されます。
  1. ツリー: 前の手順の BLOB に基づいて、対応するファイルとディレクトリを組み立ててスナップショット ツリーを形成し、Git ノードに保存します。
  2. コミット: 上記の 2 つのオブジェクトと送信されたユーザー情報をアセンブルして、バージョン スナップショットを形成します。
  3. 上記の手順では、Blob 変換を行う場合、-g パラメータを追加する必要があるなど、注意が必要な点がいくつかあります。

Git のブランチ プロセス

Git では、ブランチは最後に送信されたオブジェクトを指す独立したポインタです。ブランチには、ローカル ブランチとリモート ブランチの 2 種類があります。

ローカル ブランチの作成後、新しい送信を追加すると、HEAD が最新の送信を指すように自動的に移動します。この期間中、checkout コマンドを使用して、異なるブランチ間を切り替えます。リモート ブランチとは、異なるローカル ライブラリ間でコードを共同作業する方法を指します。

概要

この記事では、Git の基盤となるファイル ストレージ メソッドと Git の基盤となるコア処理プロセスの 2 つの側面から、Git の基盤となる処理プロセスについて詳しく説明します。 Git オブジェクトと基礎となるファイル ストレージ テクノロジの説明を通じて、Git の基礎となるアーキテクチャを理解します。この記事では、Git の初期化プロセス、Git の基本ファイル コマンド、Git の送信プロセス、Git のブランチ プロセスなど、Git の基礎となるコア処理プロセスについても紹介します。 Git の基礎となる処理フローを深く理解することで、Git の動作メカニズムをより深く理解し、バージョン管理に Git をより効率的に使用できるようになります。

以上がgit の基本的な処理フローの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。