2010-08-08 8 views
17

Ich benutze Git für die Quellcodeverwaltung und schiebe meine Änderungen in ein Repository auf einem Server im Internet zur sicheren Aufbewahrung.Wie sicher ist "Git" mit einer unzuverlässigen Verbindung?

Ich kann einige kleine Mengen von Codierung auf einem Laptop in einem Zug, der eine WiFi-Internetverbindung hat, aber es ist nicht , dass zuverlässig und gelegentlich abfällt oder wird unbrauchbar langsam tun. Meine Frage ist, was passiert, wenn meine Verbindung während eines "Git Push" verloren geht? Wird es am Ende ein beschädigtes oder halb aktuelles Git Repository geben? Und wenn ja, wie schwer ist es, es wiederzugewinnen?

+0

Ich könnte mir vorstellen, es ist wie SVN und es ist eine Transaktion .. Wenn also das Update fehlschlägt, ändert sich nichts im Repository. Ich weiß nicht genug darüber für eine richtige Antwort – WalterJ89

+0

Ich würde es auch hoffen, aber würde gerne sicher wissen :) – jcoder

Antwort

15

Git wird Ihr Git-Repository nur aufgrund einer fehlgeschlagenen oder langsamen Verbindung nicht beschädigen oder "halbieren". Es ist sehr robust und ich würde mich auch unter den schwierigsten Umständen immer noch wohl fühlen.

Die tatsächliche push Funktion wird im wesentlichen in zwei Schritten (im Falle eines schnellen Vorlauf Push, das immer der Fall sein sollte) umgesetzt:

  • Upload alle von Ihrem aktuellen Zweig Kopf erreichbaren Objekte und nicht erreichbar von der Remote-Zweigkopf
  • Update der Remote-Zweig Kopf auf die neueste verpflichten

die erste Operation ist idempotent zu zeigen, so dass, wenn es aus irgendeinem Grund auf halbem Wege durch fehlschlägt, können Sie es einfach laufen wieder alles auf den neuesten Stand bringen. Die zweite Operation ist atomar und passiert erst, wenn alle neuen Objekte hochgeladen sind.

+0

Wenn der Push-Vorgang während eines großen Updates im ersten Schritt fehlschlägt (wegen Conn-Verlust), greift git dort auf, wo es abgebrochen hat, wenn die Verbindung wiederhergestellt wird, oder von vorn beginnen? –

+0

@Mark Elliot: Objekte können einzeln oder in "Packs" übertragen werden. Ich glaube nicht, dass eine unvollständige Paketdatei am Zielort gespeichert wird, wenn die Verbindung fehlschlägt, aber wahrscheinlich einzelne Objekte sind. –

+0

@Mark Elliot: Es wird von vorne beginnen, Git verwendet die Refs (aktualisiert im zweiten Schritt), um zu bestimmen, was es senden soll. Weitere Informationen finden Sie unter Dokumentation/technical/send-pack-pipeline.txt. – CesarB

5

Laut Linus ist Git so gut im Datenbereich gesichert, dass es sogar einen Speicherfehler auf dem System erkennt, auf dem es läuft. Es wird einfach nicht die Pakete, die auf dem Server ankommen, mit einer ungültigen Prüfsumme anwenden, so dass Sie sich keine Sorgen machen müssen.

+0

Wenn ich mehrere lokale Änderungen habe, kann ich sicher sein, dass es einige von ihnen nicht anwenden wird, aber nicht Andere? – jcoder

Verwandte Themen