GitHub や GitLab などのコード ホスティング プラットフォームの人気により、Git はバージョン管理ツールとしてよく話題になり、Git がどのように機能するかを理解する人が増えています。ただし、Git の外観を理解することは、Git を使用することだけであり、Git を真に理解するには、Git の基本的な処理フローも理解する必要があります。
Git は、集中バージョン管理システム (SVN など) に対応する分散バージョン管理システムです。Git の分散的な性質のため、各 Gitリポジトリは完全なリポジトリです。
Git の作業ディレクトリには、Git ウェアハウス オブジェクトと作業ツリーの 2 つの部分が含まれています。Git ウェアハウス オブジェクトと作業ツリーのステータスは、それぞれエイリアス、ハード リンク、ソフト リンク間の関係に類推できます。
Git の基盤となるファイル ストレージ テクノロジは、主に 2 つの側面に分かれています。
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 のブランチ プロセス
ローカル ブランチの作成後、新しい送信を追加すると、HEAD が最新の送信を指すように自動的に移動します。この期間中、checkout コマンドを使用して、異なるブランチ間を切り替えます。リモート ブランチとは、異なるローカル ライブラリ間でコードを共同作業する方法を指します。
概要
以上がgit の基本的な処理フローの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。