Was ist ein Git-commit-ID?
Wie sind die Git-commit-IDs generiert, um eindeutig zu identifizieren, der begeht?
Beispiel: 521747298a3790fde1710f3aa2d03b55020575aa
Wie funktioniert es? Sind Sie nur einmalig für jedes Projekt? Oder für die Git repositories weltweit?
InformationsquelleAutor der Frage Ankur Loriya | 2015-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem Git-commit-ID ist eine SHA-1-hash jedes wichtige Sache über das Begehen. Ich werde nicht alle aufzählen, aber hier sind die wichtigsten...
Ändern, und die commit-ID ändert. Und ja, die gleichen commit mit gleichen Eigenschaften haben den gleichen ID auf einer anderen Maschine. Dies dient drei Zwecken. Zuerst, es bedeutet, das system kann feststellen, ob ein commit manipuliert wurde. Es ist gebacken rechts in die Architektur.
Zweiten, kann man schnell vergleichen begeht nur anhand Ihrer IDs. Dies macht Git ' s Netzwerk-Protokolle sehr effizient. Vergleichen wollen beiden commits, um zu sehen, ob Sie das gleiche? Nicht senden das ganze diff, senden Sie einfach die IDs.
Drittens, und das ist das Genie, die beiden commits mit den gleichen IDs die gleiche Geschichte. Das ist, warum die ID der vorherigen commits sind Teil des hash. Wenn der Inhalt einer übergabe ist das gleiche, aber die Eltern sind anders, die commit-ID muss unterschiedlich sein. Das bedeutet, dass beim Vergleich von Repositorien (wie im push-oder pull -) sobald Git findet eine Begehung gemeinsam zwischen den beiden repositories kann es halt prüfen. Das macht das schieben und ziehen extrem effizient. Zum Beispiel...
Netzwerk Gespräch für
git fetch origin
geht so etwas wie dieses...local
Hey Herkunft, welche Branchen haben Sie?origin
Ich habe den master an E.local
Ich habe nicht E, ich habe Ihren master an der B.origin
B sagen Sie? Ich habe B und es ist ein Vorfahr von Z, Die die Kontrollen. Lassen Sie mich senden Sie C, D und E.Dies ist auch der Grund, warum beim umschreiben ein commit mit Stellungswechsel, alles, nachdem es zu ändern. Hier ist ein Beispiel.
Lassen Sie uns sagen, Sie umschreiben D, nur zum ändern der log-Meldung ein bisschen. Jetzt kann D nicht mehr D, es muss kopiert werden, um einen neuen commit nennen wir D1.
Während D1 haben kann C als Ihre Muttergesellschaft (C ist unberührt, verpflichtet nicht wissen, dass Ihre Kinder) ist getrennt von der E, F und G. Wenn wir das ändern E ist Elternteil zu D1, E kann nicht E mehr. Es muss kopiert werden, um einen neuen commit E1.
Und so weiter mit F, F1 und G und G1.
Sie haben alle den gleichen code, nur andere Eltern (oder auch in D1 der Fall, eine andere commit-message).
InformationsquelleAutor der Antwort Schwern
Können Sie genau sehen, was zu machen geht in die commit-id durch ausführen
Es wird Ihnen so etwas wie
Es gibt Sie:
Git nimmt dies alles und macht einen sha1-hash. Sie reproduzieren können, die commit-id durch ausführen
Dies beginnt durch den Druck der Zeichenfolge
commit
gefolgt von einem Leerzeichen und der byte-Anzahl dercat-file
text-blob. Es fügt dann diecat-file
blob zu, gefolgt von einem null-byte. Alle, die dann ausgeführt wird durchsha1sum
.Wie Sie sehen können, gibt es nichts, der das Projekt beschreibt-oder repository-Informationen. Der Grund, dass dies nicht zu Problemen führen wird, denn es ist astronomisch unwahrscheinlich, dass zwei verschiedene commit-hashes zu kollidieren.
InformationsquelleAutor der Antwort Justin Howard