Gitの4つの作業領域:ワークスペース、ステージングエリア、リポジトリ、リモートリポジトリ

一、概念

1、4つの作業領域

Gitにはローカルに4つの作業領域があります:ワークスペース(Working Directory)、ステージングエリア(Stage/Index)、リソースリポジトリ(RepositoryまたはGit Directory)、リモートリポジトリ(Remote Directory)。ファイルはこれら4つの領域間で以下のように変換されます:

  • Workspace:ワークスペース。普段プロジェクトコードを保存する場所です。
  • Index / Stage:ステージングエリア。一時的に変更を保存する領域で、実際にはファイルのリスト情報を保存する単一のファイルです。
  • Repository:リポジトリ(またはバージョンリポジトリ)。データを安全に保存する場所で、ここにはコミットされたすべてのバージョンのデータが含まれています。HEADはリポジトリに最新のバージョンを指します。
  • Remote:リモートリポジトリ。コードをホストするサーバーで、プロジェクトグループのコンピュータとして、リモートデータ交換に使用されます。

2、ワークフロー

Gitのワークフローは通常以下のようになります:

  1. ワークスペースでファイルを追加または変更します。
  2. バージョン管理が必要なファイルをステージングエリアに追加します。
  3. ステージングエリアのファイルをGitリポジトリにコミットします。

したがって、Gitが管理するファイルには3つの状態があります:変更済み(modified)、ステージ済み(staged)、コミット済み(committed)

3、ファイルの4つの状態

バージョン管理はファイルのバージョン管理です。ファイルを変更、コミットなどの操作を行うには、まずファイルの現在の状態を知る必要があります。さもないと、まだコミットしたくないファイルをコミットしてしまったり、コミットすべきファイルがコミットされなかったりする可能性があります。

Gitはファイルの2つのバージョン間の具体的な違いを気にせず、ファイル全体が変更されたかどうかだけを気にします。ファイルが変更されると、追加・コミット時にファイルの新しいバージョンのスナップショットが生成されます。ファイル全体が変更されたかどうかを判断する方法は、SHA-1アルゴリズムを使用してファイルのチェックサムを計算することです。

  • Untracked:未追跡。このファイルはフォルダに存在しますが、Gitリポジトリに追加されておらず、バージョン管理に参加していません。git addコマンドでStaged状態になります。
  • Unmodify:ファイルはすでにリポジトリにあり、変更されていません。つまり、リポジトリ内のファイルのスナップショットの内容とフォルダ内の内容が完全に一致しています。このタイプのファイルには2つの去处があります。変更されるとModified状態になります。git rmを使用してリポジトリから削除すると、Untrackedファイルになります。
  • Modified:ファイルは変更されていますが、他の操作は行われていません。このファイルにも2つの去处があります。git addを使用するとステージ済み(staged)状態になります。git checkoutを使用すると、変更を破棄し、unmodify状態に戻ります。このgit checkoutはリポジトリからファイルを取り出し、現在の変更を上書きします。
  • Staged:ステージ済み状態。git commitを実行すると、変更がリポジトリに同期され、リポジトリ内のファイルとローカルファイルが再び一致し、ファイルはUnmodify状態になります。git reset HEAD filenameを実行すると、ステージをキャンセルし、ファイル状態はModifiedになります。

以下の図はこれら4つの状態の変化をよく説明しています:

新規ファイル → Untracked

addコマンドを使用して新規ファイルをステージングエリアに追加 → Staged

commitコマンドを使用してステージングエリアのファイルをローカルリポジトリにコミット → Unmodified

Unmodified状態のファイルを変更 → modified

Unmodified状態のファイルをremove操作 → Untracked

二、4つの領域の一般的なコマンド

1、新しいコードリポジトリの作成

# 現在のディレクトリに新しいGitリポジトリを作成
git init
# 新しいディレクトリを作成し、それをGitリポジトリとして初期化
git init [project-name]
# プロジェクトとその全履歴をダウンロード
git clone [url]

2、ファイル状態の確認

# 指定ファイルの状態を確認
git status [filename]
# すべてのファイルの状態を確認
git status

3、ワークスペース ↔ ステージングエリア

# 指定ファイルをステージングエリアに追加
git add [file1] [file2] ...
# 指定ディレクトリ(サブディレクトリを含む)をステージングエリアに追加
git add [dir]
# 現在のディレクトリのすべてのファイルをステージングエリアに追加
git add .
# ステージングエリアまたはブランチからファイルを削除し、ワークスペースでも不要な場合に使用(⚠️)
git rm file_path
# ステージングエリアまたはブランチからファイルを削除するが、ローカルではまだ使用する必要がある場合。この場合、直接pushするとそのファイルはなくなりますが、push前に再addするとまだ存在します。
git rm --cached file_path
# ファイル名を直接指定して、ステージングエリアからファイルをワークスペースに復元。ワークスペースに既にファイルがある場合は上書きされます
# 【ブランチ名】+ファイル名を追加すると、指定したブランチ名のブランチからファイルを取得し、ワークスペース内のファイルを上書きします
git checkout

4、ワークスペース ↔ リソースリポジトリ(バージョンリポジトリ)

# ステージングエリア → リソースリポジトリ(バージョンリポジトリ)
git commit -m 'このコミットの説明'
# 不必要なファイルをコミットした場合、前回のコミットが間違っていた場合、またはステージングエリアの内容を変更したくないがコミット情報を調整したい場合
# ステージングエリアに追加された不必要なファイルを削除
git reset HEAD ファイル名
# 前回のコミットを削除(add前の状態に直接戻る)
git reset HEAD^ 
# 前回のコミットを削除(add後、commit前の状態になる)
git reset --soft HEAD^ 

5、リモート操作

# リモートリポジトリの変更を取得し、ローカルブランチとマージ
git pull
# ローカルの指定ブランチをリモートリポジトリにアップロード
git push

6、その他の一般的なコマンド

# 現在のGit設定を表示
git config --list
# Git設定ファイルを編集
git config -e [--global]
# 初回コミット前に、ユーザーのメールアドレスとユーザー名を設定する必要があります:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
# Gitのヘルプドキュメントを表示
git --help
# 特定のコマンドのヘルプドキュメントを表示
git +コマンド --help
# Gitのバージョンを確認
git --version

タグ: Git バージョン管理 ワークスペース ステージングエリア リポジトリ

5月19日 20:23 投稿