Was ist der Unterschied zwischen dem Arbeitsverzeichnis und dem Git Index?

8

Das Gitbuch definiert den Git-Index:

  

Der Git-Index wird als Staging verwendet   Bereich zwischen Ihrem Arbeitsverzeichnis   und dein Repository. Du kannst den ... benutzen   Index, um eine Reihe von Änderungen aufzubauen   das du zusammen begehen willst. Wann   Sie erstellen ein Commit, was festgeschrieben ist   ist was gerade im Index steht, nicht   was ist in Ihrem Arbeitsverzeichnis .

Aber ich habe immer noch eine schwierige Zeit, es zu verstehen, besonders die hervorgehobene Aussage, dass "was begangen wird, ist nicht was ist in meinem Arbeitsverzeichnis".

Bisher ist alles im Arbeitsverzeichnis immer festgelegt, wenn ich Folgendes tue:

%Vor%

git schreibt dann alle geänderten Dateien sowie alle neuen Dateien.

Also ist mein Arbeitsverzeichnis tatsächlich der Staging-Bereich?

Ich bin mir nicht sicher, was das git index ist und wie es als Staging-Bereich interpretiert wird.

Könnten Sie das bitte erklären?

    
WinWin 09.07.2011, 14:48
quelle

4 Antworten

2

Die Antwort in Ihrem speziellen Fall ist, dass Sie die Dokumentation richtig verstehen, aber den Befehl "shortcut" verwenden, um Ihr gesamtes Arbeitsverzeichnis zu committen.

Wenn Sie git commit -a -m "Message" ausführen, wird Ihr Arbeitsverzeichnis wie der Staging-Bereich behandelt. Das ist manchmal praktisch, aber Sie verlieren die Fähigkeit, den Index wie vorgesehen zu verwenden. Versuchen Sie den folgenden Befehl:

%Vor%

Wenn Sie dies stattdessen tun, können Sie den Staging-Bereich verwenden, um nur einen Teil der Änderungen zu übernehmen, die Sie an Ihrem Arbeitsverzeichnis vorgenommen haben.

    
Clueless 09.07.2011, 14:59
quelle
7

Der Trick ist:

Wenn Sie (git add) zum Index hinzufügen, müssen Sie nicht sofort festschreiben

Also, wenn Sie eine super komplexe Funktion hinzufügen, und dann fortfahren zu ändern und ... schließlich vollständig zu brechen, können Sie immer noch committen, weil was in Ihrem Index ist (was Sie vor 10 Minuten hinzugefügt haben, bevor es weiter brechen gescheiterte Änderungen) ist nicht das, was gerade in deinem Arbeitsbaum ist (was momentan hoffnungslos kaputt ist).

Es kann also helfen, dem Index von Zeit zu Zeit einen aktuellen Entwicklungsaufwand hinzuzufügen, da Sie wissen, dass Sie jederzeit den letzten "stabilen" Zustand, den Sie indexiert haben, begehen können.

Der andere Weg, der begangen wird, ist nicht, was in Ihrem Arbeitsbaum ist, wenn Sie git add --patch :

  

Wählen Sie interaktiv Hunks des Patches zwischen dem Index und dem Arbeitsbaum und fügen Sie sie dem Index hinzu.
  Dies gibt dem Benutzer die Möglichkeit, den Unterschied zu überprüfen, bevor geänderte Inhalte zum Index hinzugefügt werden.

Sie können Teil Ihrer aktuellen Datei zum Index hinzufügen (wie eine der drei Funktionen, die Sie schreiben) und dann nur das committen.

    
VonC 09.07.2011 14:53
quelle
4

Der Index ist eine Kopie der von git verwalteten Verzeichnisstruktur. Anfangs ist es eine Kopie dessen, was im HEAD-Commit enthalten ist. git add kopiert Dateien aus dem Arbeitsverzeichnis in den Index. git commit erstellt ein neues Commit von dem, was im Index enthalten ist.

Der Index ist wie ein Puffer - er wird nicht im git-Verlauf gespeichert, aber der Zugriff darauf wird von git gesteuert (im Gegensatz zu Ihrem Arbeitsverzeichnis, auf das auf verschiedene Arten zugegriffen werden kann). Git Commit aus dem Index, also was committed ist etwas, das Git kontrolliert.

    
antlersoft 09.07.2011 14:56
quelle
2

Der Index / Staging-Bereich ist NICHT Ihr Arbeitsverzeichnis. Sie können einen einfachen Test durchführen, um dies zu sehen. Erstellen Sie eine Datei in Ihrem Arbeitsverzeichnis namens foo . Fügen Sie der Datei Text hinzu. Dann mach git add foo . Bearbeiten Sie nun foo erneut und fügen Sie weiteren Text hinzu (oder entfernen Sie ihn).

Wenn Sie git diff --cached ausführen (was anzeigt, was im Index enthalten ist), sehen Sie nur foo so, wie es nach der ersten Bearbeitungsrunde und dem nachfolgenden git add war. Wenn Sie git diff ausführen (was anzeigt, was sich in Ihrem Arbeitsverzeichnis geändert hat), sehen Sie alle zusätzlichen Änderungen, die Sie seit dem git add gemacht haben.

    
siride 09.07.2011 14:56
quelle

Tags und Links