Enthält der .git-Ordner tatsächlich Ihre Dateien?

574
IMB

Theoretisch: Wenn Sie nur den .gitOrdner auf einem Flash-Laufwerk gesichert haben und ein Rouge-Benutzer alle Ihre Projektdateien auf Ihrem PC gelöscht hat, können Sie Ihre Dateien trotzdem aus diesem .gitOrdner auf Ihrem Flash-Laufwerk wiederherstellen ?

Hinweis: Dies ist nur für ein lokales Repo-Szenario. Ich verstehe, dass Sie ein Online-Repo verwenden können.

1

3 Antworten auf die Frage

3
grawity

Ja, das meiste davon. Der .gitOrdner enthält den vollständigen Repository-Verlauf (alle Commits und deren Inhalt) sowie den Staging-Bereich (Dinge, die Sie zuvor git addnoch nicht festgelegt haben).

Wenn Git-Server Repositorys speichern, verwenden sie nur den .git-Ordner (ein "nacktes" Repository).

Es enthält jedoch keine Kopien verschiedener Dateien, von denen Sie Git noch nicht berichtet haben . Wenn Sie einige Änderungen vorgenommen git addhaben, diese jedoch nicht übernommen haben, wurden sie noch nicht in .git / objects / kopiert.

Das Extrahieren der Dateien erfolgt über git checkout -foder git checkout <paths>(wodurch der Bereitstellungsbereich in den Arbeitsbaum kopiert wird).

1
Justin Hill

Das .gitVerzeichnis in einem Projekt verfügt über genügend Informationen, um jede Version in Ihrem Commit-Verlauf wiederherzustellen.


Nur zum Spaß habe ich das lokal ausgeführt:

cd <my local repo> rm -r * ls # nothing there ls -la # some dot files/directories git checkout . ls # my stuff is back! 

Alle meine Sachen waren wieder da (außer einigen nicht festgeschriebenen Änderungen, Kompilierausgabe usw.), und ich bereute diese "Spaß" -Übung sofort


Das .git-Verzeichnis enthält jedoch genügend Informationen, um Ihre Dateien und sogar Ihre historischen Commits wiederherzustellen.

Siehe: https://git-scm.com/book/de/v2/Git-Internals-Plumbing-and-Porcelain

Refs sind keine Commits; Sie sind Zweige (gut, bewegliche Commit-Labels). Logischerweise speichert jedes Commit _ jede Datei vollständig, obwohl das zugrunde liegende Speicherformat die Deduplizierung und Komprimierung unsichtbar für den Rest von git übernimmt. grawity vor 5 Jahren 0
Guter Punkt, ich habe die Formulierung aktualisiert. Was ich zu vermitteln versuchte, war, dass Sie immer noch Zugriff auf alle Ihre Commits in der Historie haben, aber nicht jede vollständige Datei Ihrer Git-Historie einzeln speichern können. Justin Hill vor 5 Jahren 0
0
Austin Hemmelgarn

Worüber Sie sprechen, ist, was als "nacktes" Repository bekannt ist.

Im Wesentlichen .gitenthält das Verzeichnis alle Daten zu allen Revisionen, die in diesem Repository verfolgt werden. Dies umfasst alle Daten, die zum Rekonstruieren des Arbeitsverzeichnisses für einen Checkout erforderlich sind.

Wenn Sie also nie auf die einzelnen Dateien eines Repositorys zugreifen, sondern nur das Repository klonen oder aus diesem heraus pushen oder ablegen, können Sie durch das Vorhandensein des .gitVerzeichnisses möglicherweise viel Speicherplatz sparen .