Frage

Ich frage mich, wie die dezentrale DVCS Arbeit tun? Wenn es keinen zentralen Server wie kann ein Entwickler Maschine kennt und synchronisiert das Repository mit den anderen Entwicklermaschinen Repositorys. Und wie werden die Änderungen zusammengeführt? Da Mangel an zentralen Server zu mir scheint, wie das System könnte jedes Repository verursacht eine andere Revisionsnummern hat. Und wie funktioniert die Konfliktlösung behandelt werden?

War es hilfreich?

Lösung

Ich bin zu Git teilweise, aber ich glaube, die Theorie zu den meisten anderen Systemen gilt ...

Dezentrales VCS ist entworfen, um hand Verzweigung und als Teil seiner DNA Verschmelzung durch einen Zeiger auf den vorherigen halten begeht in jedem Commit, so kann jede Änderung zurück zu einem gemeinsamen Vorfahren zurückgeführt werden.

Revision „Zahlen“ als solche nicht zu beziehen verpflichtet verwendet. Offensichtlich würde es mehr als eine Sequenz sein, wenn das der Fall wäre ... Im Fall von Git, wird der Zeiger „Schlüssel“, der eindeutig identifiziert jede begehen ist ein SHA1-Hash. Das einzige, was die gesamte Anordnung sequentielle macht, ist die grafische Darstellung der Zeiger verweist jeder der Eltern begehen.

In der Praxis wird ein Entwickler verpflichtet, ihre Arbeit, ihre eigene lokale Kopie, und wenn es Zeit ist, es mit anderen zu teilen, tun sie dies in dreierlei Hinsicht:

  • Fragen Sie den anderen Entwickler die Änderungen direkt von ihnen
  • ziehen
  • Drücken direkt in die anderen Entwickler-Kopie
  • Drücken Sie die Änderungen an einer zentralen Stelle, die andere ziehen kann aus

Diese sind wirklich die gleiche Sache am Ende, weil es kommt nur auf die Differentiale zu verschmelzen. Im dritten Szenario wirkt die zentrale Lage nur als Proxy - die gleiche Sache kann ohne sie erreicht wird

.

Das System kann als zentral oder dezentral sein, wie Sie es machen zu wählen. Die meisten Projekte eine gewisse Menge an Zentralisierung haben aus praktischen Gründen, sondern an jedem Punkt eine Gabel kann das neue zentrale Repository werden oder Entwickler Handel Code können wählen zwischen sich ad-hoc.

Wenn Commits geholt und fusionierten in Ihre eigene Kopie, diese angewandt werden oben auf alles, was gemeinsame Vorfahren Sie mit der Upstream-Repository teilen. Wenn es einen Konflikt gibt, hält der Mergeprozesses bei der Schritt begehen, wo der Konflikt aufgetreten ist, und fordert Sie auf, es zu lösen, bevor Sie fortfahren die restlichen Commits auf es anzuwenden. (Standard Standard-Diff-Marker verwendet werden, um die Konflikte zu markieren.)

Die meisten verschmilzt geschehen automatisch, aber wenn es ein Konflikt ist es oft ziemlich trivial zu lösen. Das Schöne daran ist, dass Sie nicht mit einem Ball von Konflikten über mehrere Commits am Ende. Es ist viel einfacher zu lösen, weil es in der Mitte der Geschichte Pausen und lässt Sie mit ihm in kleinere, logische Stücke beschäftigen

Andere Tipps

Scott Chacon Präsentation von RailsConf im vergangenen Jahr war super. Eines der besten geplanten und informative Gespräche, die ich je gesehen habe. Ich werde mit ihm verschieben (speziell für Ihre Frage, der Remote-Workflow Teil beginnt um 18 Minuten hinein):

RailsConf Git Diskussion

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top