ローカル リポジトリとリモート リポジトリの比較と対比

完了

Git は、ソース コードがすべての開発者のマシンに配置される分散システムです。 これには、そのプロジェクトに対するすべてのコミットを含む完全な履歴が含まれます。 これは、ローカル リポジトリと呼ばれます。

これにより、開発者は、機能を開発している間に誰かがコードを壊すことを心配することなく、独自の分離環境で作業を行うことができます。 また、以前のバージョン、ロールバック コード、マージ コードなどとコードを比較することもできます。 ネットワーク接続なしでこれを行うこともできます。

開発者が Git で実行する作業の大部分は、ローカルリポジトリ上で行われます。 Git は分岐をサポート (および支援) します。 分岐については別のモジュールで説明しますが、ほとんどの分岐はローカル リポジトリにも作成されます。

後の段階で、変更または新しい機能を開発チームと共有する必要があります。 したがって、Gitでは リモート リポジトリを使用します。 ローカル リポジトリは、必要に応じて複数のリモート リポジトリにリンクすることもできます。 リモート リポジトリは、他のチーム メンバーとコードを簡単に共有するために使用されますが、ビルド パイプラインを設定することもできます。 これらのパイプラインは、リモート リポジトリにプッシュされるコードをビルドします。 pushは、パイプラインを開始するトリガーにすることができます。

ローカル リポジトリ

ローカル リポジトリでは、3 つの異なる領域またはディレクトリを区別できます。

  • 作業ディレクトリ: コードの 1 つのバージョンの 1 回のチェックアウトです。 作業ディレクトリには、作業中のコードが含まれています。 ファイルを変更するには、チェックアウト コマンドを使用します。 作業中の分岐を変更するたびに、作業ディレクトリ内のファイルが特定のバージョンのコードに似たものになるように変更されます。 Windows エクスプローラーには、作業ディレクトリ内のファイルが表示されます。

  • ステージング領域: この領域は、作業ディレクトリと Git ディレクトリの間の領域として使用されます。 作業ディレクトリから Git ディレクトリにファイルをコミットするには、最初にそのファイルをステージングする必要があります。 その後、その時点で、次のコミット用のマークが付いたファイルが表示されます。 このファイルを使用して作業を続けることができます。 ステージングされていないファイルに対するすべての変更は、次のコミットでは追加されません。 ステージングされたファイルの内容のみが追加されます。 これは、機能を使用中の場合に役立ちますが、完了したわけではありません。 変更をステージングして、作業を続けることができます。 その日の終わりにコミットする必要がある場合でも、作業途中のファイルにコミットするリスクなしで、作業バージョン (ステージング領域からのバージョン) をコミットできます。

  • Git ディレクトリ: Git ディレクトリには、すべてのメタデータとオブジェクト データベースが含まれています。 Git ディレクトリにコミットする各ファイルは、このディレクトリ内に格納されます。 Windows エクスプローラーで非表示の項目を有効にすると、非表示の .git フォルダーを表示できます。 このフォルダーには、オブジェクトを含むフォルダーがありますが、ポインター情報も含まれています。 このフォルダーを削除すると、ローカル Git リポジトリが削除されます。 これにより、ローカル リポジトリを USB ドライブに配置して、他のコンピュータでも簡単に使用することができます。 このディレクトリはいじらないでください。ローカル リポジトリが壊れてしまいます。 このディレクトリは、リモート リポジトリと同期するために使用されるディレクトリでもあります。

作業ディレクトリ、ステージング、リポジトリが表示されたローカル リポジトリ領域のフローの図。

この設定を使用すると、Git 内のファイルを 3 つのステージのいずれかにすることができます。

  • Git ディレクトリに変更および保存されません: ファイルはコミットされます。

  • 変更され、ステージング領域あります: ファイルがステージングされています。

  • 変更され、ステージング領域にありません ファイルが変更されています。

Git ファイル ライフサイクル

次のスキーマでは、ファイルが経る完全なライフサイクルを確認できます。 新しいファイルが作成されるか、Windows エクスプローラー内のフォルダーに追加されると、そのファイルは追跡対象でないステータスを取得します。 このファイルは Git ライフサイクルの一部ではありません。 追加コマンドを使用して、ステージングされるステージング領域にこのファイルを追加します。後でコミット コマンドを使用して、ファイルを Git ディレクトリに追加できます。 その後、このファイルのステータスは変更されていないになります。 ファイルを編集するたびに、ファイルは変更されたステータス、または、Git ディレクトリからファイルを削除したときに追跡対象でないステータスになります。 ファイルを削除するには、rm コマンドを使用します。 Git ディレクトリからファイルを削除しても、そのファイルがディスク上でも削除されるわけではありません。 このアクションは、開発者が手動で行う必要があります。

[追跡対象でない]、[変更されていない]、[変更された]、[ステージングされた] を表示する、Git ファイルのライフサイクルの図。

リモート リポジトリ

次に、push および pull コマンドを介してリモート リポジトリを使用して、ローカル リポジトリとの同期を行います。 したがって、コードを共有したり、チームから更新内容を取得したりする場合でも、ローカル リポジトリを更新するコマンドを使用して行われます。 各リポジトリは独立しているため、リポジトリの所有者は、他のリポジトリからの変更によってリポジトリの最新の状態を維持する必要があります。

次のスキーマでは、2 人の開発者がリモート リポジトリを使用して変更を共有する方法を確認できます。 開発者 A は、変更をローカル リポジトリにコミットし、push コマンドを使用して変更内容をリモート リポジトリにアップロードします。 開発者 B は、pull コマンドを使用して変更をダウンロードし、変更をプッシュできます。

2 人の開発者がリモート リポジトリを操作する図。