Hinweis: Die Antwort auf die aktuelle Frage finden Sie unter "BEARBEITEN"
Lesen Sie zunächst Subversion Re-education von Joel Spolsky. Ich denke, die meisten Ihrer Fragen werden dort beantwortet.
Eine weitere Empfehlung, Linus Torvalds 'Vortrag auf Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Dieser andere könnte auch die meisten Ihrer Fragen beantworten, und es ist ziemlich unterhaltsam.
Übrigens finde ich das ziemlich lustig: Sogar Brian Fitzpatrick & Ben Collins-Sussman, zwei der ursprünglichen Erfinder von Subversion, sagten in einem Google-Vortrag "Entschuldigung", dass Subversion gegenüber Mercurial (und DVCSs im Allgemeinen) unterlegen sei.
Nun, IMO und im Allgemeinen, entwickelt sich die Teamdynamik mit jedem DVCS auf natürlichere Weise. Ein herausragender Vorteil ist, dass Sie ein Commit offline durchführen können, da dies die folgenden Dinge impliziert:
- Sie sind nicht auf einen Server und eine Verbindung angewiesen, was schnellere Zeiten bedeutet.
- Nicht als Sklave an Orte gehen, an denen Sie einen Internetzugang (oder ein VPN) haben, nur um ein Commit durchführen zu können.
- Jeder hat ein Backup von allem (Dateien, Verlauf), nicht nur vom Server. Das heißt, jeder kann zum Server werden .
- Sie können zwanghaft ein Commit ausführen , ohne den Code anderer zu verfälschen . Commits sind lokal. Sie treten einander beim Festschreiben nicht auf die Zehen. Sie können Builds oder Umgebungen anderer nicht einfach durch Festschreiben beschädigen.
- Personen ohne "Commit-Zugriff" können ein Commit durchführen (da das Commit in einem DVCS nicht das Hochladen von Code impliziert), wodurch die Sperre für Beiträge gesenkt wird. Sie können entscheiden, ob Sie die Änderungen übernehmen oder nicht als Integrator.
- Es kann die natürliche Kommunikation verstärken, da ein DVCS dies unerlässlich macht. In Subversion haben Sie stattdessen Commit-Rassen, die die Kommunikation erzwingen, aber Ihre Arbeit behindern.
- Die Mitwirkenden können sich zusammenschließen und ihre eigene Zusammenführung durchführen, was letztendlich weniger Arbeit für die Integratoren bedeutet.
- Mitwirkende können ihre eigenen Zweige haben, ohne die der anderen zu beeinträchtigen (können diese aber bei Bedarf teilen).
Über Ihre Punkte:
- In DVCSland gibt es keine Möglichkeit, die Hölle zu verschmelzen. muss nicht behandelt werden. Siehe nächster Punkt .
- In DVCSs stellt jeder eine "Verzweigung" dar, was bedeutet, dass bei jedem Abruf von Änderungen Zusammenführungen stattfinden. Benannte Zweige sind eine andere Sache.
- Sie können die kontinuierliche Integration fortsetzen, wenn Sie möchten. IMHO nicht notwendig, warum Komplexität hinzufügen? Bewahren Sie Ihre Tests einfach als Teil Ihrer Kultur / Richtlinie auf.
- Mercurial ist in einigen Dingen schneller, Git ist in anderen Dingen schneller. Nicht wirklich bis zu DVCSs im Allgemeinen, aber zu ihren speziellen Implementierungen AFAIK.
- Jeder wird immer das volle Projekt haben, nicht nur Sie. Die verteilte Sache hat damit zu tun, dass Sie lokal ein Commit / Update durchführen können. Das Freigeben / Abnehmen von außerhalb Ihres Computers wird als Push / Pull bezeichnet.
- Lesen Sie erneut Subversion Umerziehung. DVCSs sind einfacher und natürlicher, aber sie unterscheiden sich. Denken Sie nicht, dass cvs / svn die Basis aller Versionsverwaltung ist.
Ich habe einige Dokumentationen zum Joomla-Projekt beigesteuert, um eine Migration auf DVCS zu predigen, und hier habe ich einige Diagramme erstellt, um zentralisierte vs. verteilte zu veranschaulichen.
Zentralisiert
In der allgemeinen Praxis verteilt
In vollen Zügen verteilt
Sie sehen in dem Diagramm, dass es immer noch ein "zentralisiertes Repository" gibt, und dies ist eines der Lieblingsargumente der Fans der zentralen Versionierung: "Sie werden immer noch zentralisiert", und nein, Sie sind es nicht, da das "zentralisierte" Repository nur Ihr Repository ist Alle sind sich einig (z. B. ein offizielles Github-Repo), dies kann sich jedoch jederzeit ändern.
Dies ist der typische Workflow für Open-Source-Projekte (z. B. ein Projekt mit massiver Zusammenarbeit) unter Verwendung von DVCSs:
Bitbucket.org ist so etwas wie ein Github-Äquivalent für Quecksilber. Wenn Ihr Team kleiner als fünf ist, können Sie es kostenlos verwenden.
Der beste Weg, sich von der Verwendung eines DVCS zu überzeugen, ist das Ausprobieren eines DVCS. Jeder erfahrene DVCS-Entwickler, der svn / cvs verwendet hat, wird Ihnen sagen, dass es sich lohnt und dass er nicht weiß, wie er die ganze Zeit ohne DVCS überlebt hat.
BEARBEITEN : Zur Beantwortung Ihrer zweiten Bearbeitung kann ich nur wiederholen, dass Sie bei einem DVCS einen anderen Workflow haben. Ich rate Ihnen, nicht nach Gründen zu suchen, um es nicht aufgrund von Best Practices zu versuchen. Es fühlt sich an, als würden die Leute argumentieren, dass OOP nicht ist notwendig, weil sie komplexe Entwurfsmuster mit dem umgehen können, was sie immer mit dem Paradigma XYZ tun; Sie können sowieso profitieren.
Probieren Sie es aus, Sie werden sehen, wie besser es ist, in "einer privaten Filiale" zu arbeiten. Ein Grund, warum ich sagen kann, warum das Letzte wahr ist, ist, dass Sie die Angst verlieren, sich zu verpflichten , so dass Sie sich jederzeit verpflichten können, wenn Sie es für richtig halten und auf natürlichere Weise arbeiten.
In Bezug auf "Hölle verschmelzen" sagen Sie "es sei denn, wir experimentieren", ich sage "auch wenn Sie gleichzeitig experimentieren, warten und in der überarbeiteten Version 2.0 arbeiten ". Wie ich bereits sagte, gibt es keine Verschmelzung der Hölle, weil:
- Jedes Mal, wenn Sie sich verpflichten, einen unbenannten Zweig zu generieren, und wenn Ihre Änderungen den Änderungen anderer Personen entsprechen, erfolgt eine natürliche Zusammenführung.
- Da DVCSs für jedes Commit mehr Metadaten erfassen, treten beim Zusammenführen weniger Konflikte auf, sodass Sie es sogar als "intelligentes Zusammenführen" bezeichnen können.
- Wenn Sie auf Zusammenführungskonflikte stoßen, können Sie Folgendes verwenden:
Auch die Projektgröße spielt keine Rolle, als ich von Subversion wechselte, sah ich die Vorteile bereits, als ich alleine arbeitete. Alles fühlte sich einfach richtig an. Mit den Changesets (nicht genau eine Revision, sondern ein bestimmter Satz von Änderungen für bestimmte Dateien, die Sie mit einem Commit versehen und vom Status der Codebasis isoliert haben) können Sie genau veranschaulichen, was Sie damit gemeint haben, was Sie mit einer bestimmten Gruppe von Dateien gemacht haben. nicht die ganze Codebasis.
In Bezug auf die Funktionsweise von Changesets und die Leistungssteigerung. Ich werde versuchen, es mit einem Beispiel zu veranschaulichen, das ich gerne gebe: Das Mootools-Projekt wechselt von svn, das in der Grafik ihres Github-Netzwerks dargestellt ist .
Vor
Nach
Was Sie sehen, ist, dass Entwickler sich auf ihre eigene Arbeit konzentrieren können, ohne Angst davor zu haben, den Code anderer zu brechen. Sie sorgen sich darum, den Code anderer nach dem Drücken / Ziehen zu brechen ), aber da das Zusammenführen hier intelligenter ist, geschieht dies oft nie ... selbst wenn es einen Zusammenführungskonflikt gibt (was selten vorkommt), verbringen Sie nur 5 Minuten oder weniger damit, ihn zu beheben.
Meine Empfehlung an Sie ist, jemanden zu suchen, der weiß, wie man Quecksilber verwendet, und ihn / sie zu bitten, es Ihnen praktisch zu erklären. Indem ich ungefähr eine halbe Stunde mit ein paar Freunden in der Kommandozeile verbrachte, während ich mercurial mit unseren Desktops und Bitbucket-Konten verwendete, um ihnen zu zeigen, wie man Konflikte fabriziert, um sie in einer lächerlichen Menge Zeit zu beheben, konnte ich zeigen ihnen die wahre Kraft eines DVCS.
Schließlich würde ich Ihnen empfehlen, mercurial + bitbucket anstelle von git + github zu verwenden, wenn Sie mit Windows-Leuten arbeiten. Mercurial ist auch ein bisschen einfacher, aber Git ist leistungsfähiger für eine komplexere Repository-Verwaltung (z . B. Git-Rebase ).
Einige zusätzliche empfohlene Lesungen: