Git-Arbeitsverzeichnis, Staging-Bereich und Repository


Grundlegende Konzepte

Lassen Sie uns zunächst die Konzepte des Git-Arbeitsverzeichnisses, des Staging-Bereichs und des Repositorys verstehen:

  • Arbeitsbereich:Ist das Verzeichnis, das Sie auf Ihrem Computer sehen können.
  • Staging-Bereich:Auf Englisch heißt er "stage" oder "index". Er wird im Allgemeinen in.gitgespeichert. Er befindet sich in der Indexdatei (.git/index) im Verzeichnis, daher nennen wir den Staging-Bereich manchmal auch Index.
  • Repository:Der Arbeitsbereich hat ein verstecktes Verzeichnis.git, das nicht das Arbeitsverzeichnis ist, sondern das Repository von Git.

Das folgende Diagramm veranschaulicht die Beziehung zwischen dem Arbeitsverzeichnis, dem Staging-Bereich im Repository und dem Repository:

  • In der Abbildung ist die linke Seite das Arbeitsverzeichnis und die rechte Seite das Repository. Im Repository ist der mit "index" gekennzeichnete Bereich der Staging-Bereich (Stage/Index), und der mit "master" gekennzeichnete Bereich ist der vom master-Branch repräsentierte Verzeichnisbaum.

  • Aus dem Diagramm ist ersichtlich, dass "HEAD" tatsächlich ein "Cursor" ist, der auf den master-Branch zeigt. Daher kann HEAD überall dort, wo es in den im Diagramm gezeigten Befehlen vorkommt, durch master ersetzt werden.

  • Der mit "objects" gekennzeichnete Bereich in der Abbildung ist Gits Objektdatenbank, die sich tatsächlich im Verzeichnis ".git/objects" befindet und verschiedene Objekte und erstellte Inhalte enthält.

  • When executing the command on files that have been modified (or added) in the working directorygit addausgeführt wird, wird der Verzeichnisbaum des Staging-Bereichs aktualisiert und der Inhalt der im Arbeitsverzeichnis geänderten (oder neu hinzugefügten) Dateien in ein neues Objekt in der Objektdatenbank geschrieben, während die ID dieses Objekts im Dateiindex des Staging-Bereichs aufgezeichnet wird.

  • Wenn ein Commit-Vorgang (git commit) durchgeführt wird, wird der Verzeichnisbaum des Staging-Bereichs in das Repository (Objektdatenbank) geschrieben und der master-Branch entsprechend aktualisiert. Das heißt, der Verzeichnisbaum, auf den master zeigt, ist der Verzeichnisbaum des Staging-Bereichs zum Zeitpunkt des Commits.

  • When executinggit reset HEADausgeführt wird, wird der Verzeichnisbaum des Staging-Bereichs neu geschrieben und durch den Verzeichnisbaum ersetzt, auf den der master-Branch zeigt, aber das Arbeitsverzeichnis wird nicht beeinflusst.

  • When executinggit rm --cached <file>ausgeführt wird, löscht der Befehl die Dateien direkt aus dem Staging-Bereich, während das Arbeitsverzeichnis unverändert bleibt.

  • Beim Ausführen vongit checkout .odergit checkout -- <file>, ersetzt der Befehl die Dateien im Arbeitsverzeichnis durch alle oder die angegebenen Dateien aus dem Staging-Bereich. Dieser Vorgang ist sehr gefährlich, da er Änderungen im Arbeitsverzeichnis löscht, die noch nicht zum Staging-Bereich hinzugefügt wurden.

  • Beim Ausführen vongit checkout HEAD .odergit checkout HEAD <file>, ersetzt der Befehl die Dateien sowohl im Staging-Bereich als auch im Arbeitsverzeichnis durch alle oder einige Dateien aus dem Master-Branch, auf den HEAD zeigt. Dieser Befehl ist ebenfalls äußerst gefährlich, da er nicht nur nicht committete Änderungen im Arbeitsverzeichnis, sondern auch nicht committete Änderungen im Staging-Bereich löscht.

1. Arbeitsverzeichnis

Das Arbeitsverzeichnis ist das Projektverzeichnis auf Ihrem lokalen Computer, in dem Sie Dateien erstellen, ändern und löschen. Das Arbeitsverzeichnis enthält alle Dateien und Unterverzeichnisse des aktuellen Projekts.

Funktionen:

  • Zeigt den aktuellen Status des Projekts an.
  • Dateiänderungen werden im Arbeitsverzeichnis vorgenommen, aber diese Änderungen wurden noch nicht in der Versionskontrolle erfasst.

2. Staging-Bereich

Der Staging-Bereich ist ein temporärer Speicherbereich, der Snapshots von Dateien enthält, die gerade in das Repository committet werden sollen. Vor dem Committen können Sie Änderungen aus dem Arbeitsverzeichnis selektiv zum Staging-Bereich hinzufügen.

Funktionen:

  • Der Staging-Bereich speichert die Änderungen, die in den nächsten Commit aufgenommen werden.
  • Sie können ihn mehrmals verwendengit addBefehl, um Dateien zum Staging-Bereich hinzuzufügen, bis Sie bereit sind, alle Änderungen zu committen.

Gängige Befehle:

git add filename       # 将单个文件添加到暂存区
git add .              # 将工作区中的所有修改添加到暂存区
git status             # 查看哪些文件在暂存区中

3. Repository

Das Repository enthält die vollständige Versionshistorie des Projekts.

Jeder Commit erstellt einen neuen Snapshot im Repository. Diese Snapshots sind unveränderlich, was die vollständige Historie des Projekts gewährleistet.

Funktionen:

  • Das Repository wird in das lokale Repository und das Remote-Repository unterteilt. Dies bezieht sich hier hauptsächlich auf das lokale Repository.
  • Das lokale Repository befindet sich in.gitdem Verzeichnis, das alle committeten Objekte und Referenzen enthält.

Gängige Befehle:

git commit -m "Commit message"   # 将暂存区的更改提交到本地版本库
git log                          # 查看提交历史
git diff                         # 查看工作区和暂存区之间的差异
git diff --cached                # 查看暂存区和最后一次提交之间的差异

Die Beziehung zwischen Arbeitsverzeichnis, Staging-Bereich und Repository

1. Arbeitsverzeichnis -> Staging-Bereich

Verwenden Sie den Befehl git add, um Änderungen aus dem Arbeitsverzeichnis zum Staging-Bereich hinzuzufügen.

git add filename

2. Staging-Bereich -> Repository

Verwenden Sie den Befehl git commit, um Änderungen aus dem Staging-Bereich in das Repository zu committen.

git commit -m "Commit message"

3. Repository -> Remote-Repository

Verwenden Sie den Befehl git push, um Commits vom lokalen Repository zum Remote-Repository zu pushen.

git push origin branch-name

4. Remote-Repository -> Lokales Repository

Verwenden Sie den Befehl git pull oder git fetch, um Aktualisierungen vom Remote-Repository abzurufen.

git pull origin branch-name
# 或者
git fetch origin branch-name
git merge origin/branch-name

Beispiel

Angenommen, Sie haben file.txt im Arbeitsverzeichnis geändert:

1. Arbeitsbereich

Ändern Sie file.txt und speichern Sie.

2. Staging-Bereich

Fügen Sie die Änderungen dem Staging-Bereich hinzu:

git add file.txt

3. Repository

Committen Sie die Änderungen aus dem Staging-Bereich in das lokale Repository:

git commit -m "Update file.txt"

4. Remote-Repository

Pushe lokale Commits zum Remote-Repository:

git push origin main

Wenn Sie die Rollen des Arbeitsverzeichnisses, des Staging-Bereichs und des Repositorys sowie ihre Wechselbeziehungen verstehen, können Sie Git effizienter für die Versionskontrolle und die gemeinsame Entwicklung nutzen.

Weitere Erweiterungen