Wie funktioniert git-track-Datei änderungen intern?
Könnte jemand erklären, wie git weiß innerlich, dass die Dateien X, Y und Z haben sich geändert? Was ist der Prozess hinter den kulissen, die erkennt, wenn eine Datei noch nicht Hinzugefügt wurde oder hat Veränderungen? Ich Frage, weil, mit Subversion ist es einfach herauszufinden, dass es hält verfolgen diese Dinge durch eine .svn
Verzeichnis unter jedem Ordner, sondern für git, die ich kann nicht scheinen zu finden, eine Beschreibung über das Innenleben dieses. Ich bezweifle es scannt durch alle sub-Verzeichnisse für änderungen, da es Recht schnell.
So, aus Neugier, was sind deren Innenleben?
- Ich weiß schon, wie die Arbeit mit git, nur nicht, dass etwas.
- das ist genau das, was die doppelte deals mit.
- Dass die "Antwort" ist nur eine Reihe von links zu Seiten und bezahlt Bücher. Ich glaube, dass meine Fragen spezifisch genug und ich weiß nicht zu sein scheinen überzeugt, dass es Duplikate der andere, es sei denn, ich bin nicht etwas zu sehen.
- Ich auch nicht einverstanden - die Frage, die Sie verlinken ist ein streuschuss Sammlung verschiedener Bücher über git unterschiedlicher Ebenen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Mechanismen, durch die eine bestimmt, der status einer Datei ist Recht einfach. Zu wissen, was für Dateien wurden inszeniert, die man einfach diffs die
HEAD
tree mit dem index. Alle Elemente werden nur in der index über die Bühne gegangen bei der addition alle Elemente erscheinen nur inHEAD
entfernt wurden und alle Elemente, die anders sind, haben änderungen inszeniert.Ähnlich, würde man erkennen unstaged changes von diff ' Ing der index mit dem Arbeitsverzeichnis.
Ihre Frage, die insbesondere fragt, wie diese so schnell kann (nach allem, Berechnung der SHA1-hash einer Datei nicht genau speedy.) Dies ist, wo die index - auch bekannt als die cache - kommt in wieder zu spielen. Der index wird auch Felder für Datei-Größe und Datei-änderungszeit. So kann man einfach
stat(2)
eine Datei auf dem Datenträger und vergleichen Sie Sie mit den index-Datei-Größe und Datei-änderungszeit zu wissen, ob der hash der Datei oder nicht.diff
ing-Datei-Inhalte in den index vs Arbeitsverzeichnis?Finden Sie Ihre Antwort in das freie Buch Pro Git auf Kapitel Git-Interna
In diesem Kapitel wird erklärt, wie git arbeitet hinter der Haube.
Als Leo erklärte, git checkt den SHA1 der Dateien, um zu sehen, ob er sich verändert hat
Sie können es, wie dieser (aus der Git Interna):
Dann schreiben einige neue Inhalte auf die Datei, und speichern Sie es erneut:
Wenn die Antwort auf die mögliche Duplikate nicht ausreichen, möchten Sie vielleicht einen Blick auf diese http://www.geekgumbo.com/2011/07/19/git-basics-how-git-saves-your-work/
Um eine lange Geschichte kurz, Git verwendet die
SHA-1
der Inhalt der Datei änderungen zu verfolgen. Git verfolgt vier Objekte: einen blob, ein Baum, eine zu Begehen, und ein tag.Ihre Frage zu beantworten, wie er die Spur hält der änderungen hier ist ein Zitat aus diesem link:
Fand ich die folgende Erklärung hilfreich, kürzlich in einem Kurs, Git Essential Training von Kevin Skoglund, ich folgte ihm auf Lynda.com.
Git erzeugt einen hash-Schlüssel, bestehend aus 40 hexadezimale Zeichen, die durch ausführen eines Algorithmus auf die Veränderungen, die wir begangen haben. Zum Beispiel, wenn wir Begehen gleichen Satz von änderungen zu verschiedenen Anlässen, wir sollten den gleichen hash-Schlüssel.
Zusätzlich speichert die bisherigen änderungen durch das halten folgende meta-Informationen für jeden commit.
Jede anschließende übergabe, bezieht sich auf ein Elternteil verpflichten, während der erste commit wird nicht haben einen Elternteil(oder eine null/null-Wert). Das folgende Diagramm wäre in diesem Zusammenhang hilfreich sein.
Bild-Kredit : Git Ausbildung ist entscheidend von Kevin Skoglund auf Lynda.com
Git Essential Training von Kevin Skoglund auf Lynda.com
Ich fand diesen Artikel sehr hilfreich.
https://codewords.recurse.com/issues/two/git-from-the-inside-out
- Extrakt- Machen Begehen, dass ist nicht der erste commit