Wie kann ich Commits ordnungsgemäß verwalten, Funktionskonflikte verhindern und Abhängigkeiten mit einem VCS verwalten?


9

Es ist zu einem nervigen Faktor bei der Arbeit mit großen Teams geworden: Wie verwalten Sie Eincheckvorgänge und verhindern Funktionskonflikte und verwalten Abhängigkeiten mit der Quellcodeverwaltung ordnungsgemäß?

Derzeit verwenden wir an meinem Arbeitsplatz TFS 2008 und migrieren Anfang Dezember auf TFS 2010. Erstens ist jede Quellcodeverwaltung besser als keine, aber welchen Ansatz hat jemand als nützlich erachtet, um mehrere Eincheckvorgänge und Rollbacks im gesamten Verlauf der Quellcodeverwaltung zu verhindern? Ist ein flüchtiger Trunk der beste Weg, um zu verzweigen, wenn Sie eine neue Funktion implementieren und wenn Sie zufrieden sind, wieder in den Trunk übergehen?

Ich würde gerne die Erfahrungen anderer Leute und vielleicht einige Best Practices für die Verwaltung der Quellcodeverwaltung hören.



3
Die beste Lösung, die ich gefunden habe, um mit TFS umzugehen, bestand darin, ein eigenes privates GIT zu haben, in dem ich mit allen erforderlichen Verzweigungen herummischen und Commits für TFS pro kleinen Meilenstein (kleines Merkmal, teilweises Merkmal) durchführen kann. Je kleiner, desto besser, aber Sie müssen es auch Stellen Sie sicher, dass der Code beim Festschreiben korrekt ist. Bei einem Zweig pro Feature / Bugfix / Iteration würde ich mich am Ende des "Zweigs" auf TFS festlegen. Intern ist es jedoch durchaus üblich, dass ich mehrere Zweige für die verschiedenen Versuche und Erkundungen habe. TFS Power Tools hier ist sehr nützlich, um die Zusammenführung zu automatisieren
Newtopian

1
Bitte erläutern Sie genauer, was Sie unter "Mehrfacheinchecken" und "Kofferraum verletzen" verstehen. Ich hoffe wirklich, dass jeder meiner Ingenieure mehr als ein Check-in durchführt, während Mitglieder meines Teams.
Manfred

Die Verzweigungsstrategie für die Quellcodeverwaltung ist ein großes Thema. programmers.stackexchange.com/questions/107884/…
Mücke

@ John - Ich denke, "verletzen" war ein Tippfehler für "flüchtig"
ChrisF

Antworten:


7

TFS? Lauf in die Berge! Gehen Sie so schnell wie möglich los. Es macht viele verschiedene Dinge, aber keines davon ist so gut wie die verfügbaren besten Werkzeuge.

Aber ernsthaft:

Sobald Sie ein anständiges Versionskontrollsystem (SVN, GIT usw.) haben, würde ich empfehlen, Regeln für die Zweigstellenverwaltung einzurichten, z. B. wann Zweige erstellt werden sollen, wofür, wann, wer zusammengeführt werden soll und vieles mehr.

Bis vor kurzem haben wir einen einzelnen Zweig für die Neuentwicklung verwendet ('Trunk'). Für eine Veröffentlichung würden wir einen Zweig vom Stamm erstellen. Die endgültige Qualitätssicherung würde in dieser Niederlassung durchgeführt und sobald sie abgeschlossen ist, würden wir sie veröffentlichen (wir haben monatliche Veröffentlichungen).

Wir haben auf das Konzept „Kein Müll im Kofferraum“ umgestellt, um das Zeitplanrisiko zu verringern. Dieses Konzept enthält im Wesentlichen eine Regel, nach der Sie Zweige für die Entwicklungsarbeit getrennt vom Trunk erstellen. Beispielsweise könnten Sie einen separaten Zweig für ein Feature, für ein kleines Entwicklungsteam oder ähnliches haben. Wir verwenden "Epen", um ein kleines Feature oder einen freisetzbaren Teil eines Features zu beschreiben und für jedes Epos einen Zweig zu erstellen. Mindestens einmal am Tag werden alle Änderungen vom Stamm in den epischen Zweig zusammengeführt. Der Schlüssel ist eine gute Zusammenführungsunterstützung durch Versionskontrolle oder ein separates Tool (z. B. Drei-Wege-Zusammenführung). Die Qualitätssicherung für das Epos würde im epischen Zweig erfolgen. Nach dem Bestehen wird der epische Zweig in Trunk zusammengeführt und ein Integrationstest ausgeführt. Wir haben noch Filialen für Veröffentlichungen.

Mit den epischen Zweigen haben wir das Zeitplanrisiko erheblich reduziert, da wir nun in der Lage sind, aus dem Stamm herauszukommen und alle Epen einzuschließen, die erfolgreich in den Stamm zusammengeführt wurden. Epen, die nicht vollständig sind, verpassen den Bus und werden die nächste Veröffentlichung (nächsten Monat) machen.

Dies kann natürlich nur in unserer Umgebung funktionieren. Sehr wahrscheinlich haben Sie andere Faktoren als unsere, die die beste Wahl für das Filialmanagement beeinflussen.

Wenn Sie beispielsweise ein Team mit vielen Mitarbeitern haben, die remote arbeiten und nicht immer mit dem Versionskontrollserver verbunden sind, möchten Sie ein Versionskontrollsystem verwenden, das ein verteiltes Modell unterstützt. GIT und einige andere würden in diese Kategorie fallen. TFS erfordert nach meinem besten Wissen eine Verbindung zum Server, um nur Dateien beschreibbar zu machen (behoben in Version 2010?).

Ich hoffe ich konnte zeigen, dass es nicht "one size fits all" gibt. Beginnen Sie mit Ihren Prozessen, insbesondere der Filialverwaltung, bestimmen Sie die Anforderungen und wählen Sie schließlich das Tool aus, das Ihren Anforderungen am besten entspricht. Vielleicht ist es TFS, vielleicht auch nicht.


2
"TFS? Lauf in die Berge!" - Ich bin versucht, ein zweites Konto zu erstellen, damit ich dieses zweimal abstimme.
Ameise

Gut zu hören, dass dies für Sie funktioniert. Ich war in ähnlichen Projekten, in denen dies erforderlich war. Aber die Art und Weise, wie Sie "epische" Zweige zusammenführen, lässt es einfach klingen. Ich möchte darauf hinweisen, dass es höchstwahrscheinlich jedes Mal ein schrecklicher Schmerz ist.
Lionel

1
@ Lionel: Ich stimme zu, das kann passieren. Ich habe in der Vergangenheit auch etwas Ähnliches gesehen, das schrecklich schief gelaufen ist. Meiner Erfahrung nach besteht der Schlüssel zur erfolgreichen Verwendung dieses Ansatzes darin, das Delta zwischen Trunk- und Feature-Zweigen so klein wie möglich zu halten. Mindestens einmal am Tag müssen Sie vom Stamm zusammenführen. Ebenso lohnt es sich, die Epen / Features so klein wie möglich zu halten, z. B. mehr auf der Tage- / Wochen-Skala als in vielen Monaten. Sehr vorteilhaft ist auch eine saubere Architektur und ein sauberes Design sowie ein (vollständig) überarbeiteter Code.
Manfred

@ John Stimme voll und ganz deinem letzten Kommentar zu. Das Hauptproblem, das ich in der Vergangenheit erlebt habe, ist, dass "neue Funktionen" normalerweise groß und kompliziert sind und Designänderungen an vorhandenem Code im Trunk enthalten. Die Implementierung und der Test können Monate dauern. Das Zusammenführen in den Kofferraum wäre ein Albtraum, wenn mehr als ein Team an verschiedenen Funktionen arbeitet.
Lionel

4

Ich befürworte einen Zweig pro Feature, da dies eine große Flexibilität bei der Entscheidung ermöglicht, welche Features ausgeliefert und welche verschoben werden sollen.

Wie gut das in Ihrer Situation funktioniert, hängt davon ab, wie gut Ihr VCS mit Zweigen umgeht und, was noch wichtiger ist, zusammengeführt wird. DVCS wie Git & Mercurial machen dies zu einer relativ trivialen Übung. SVN weniger. Ich habe es geschafft, TFS zu vermeiden, obwohl ich viel darüber gelesen habe, meistens unkompliziert, fürchte ich. Wenn Sie mit TFS nicht weiterkommen, führen Sie eine kleine Pilotversion basierend auf einer Funktion pro Zweig durch und sehen Sie, wie gut die Zusammenführung für Sie funktioniert.


2

Erstens ein Haftungsausschluss. Es ist schwierig zu sagen, wie Sie Ihre Quelle am besten verwalten können, da wir nicht wissen, wie Ihr Team oder Ihre Teams täglich arbeiten.

Im Allgemeinen ist es besser, am Kofferraum zu arbeiten. Verzweigen Sie es für jede Hauptversion - damit sich Fehlerbehebungen für die Release-Version in der Verzweigung befinden, die wieder in den Trunk integriert werden können. Alle Entwickler arbeiten am Trunk und schreiben regelmäßig Code fest (mindestens einmal am Tag).

Durch das regelmäßige Zusammenführen von neuem Code wird der Aufwand für das Zusammenführen großer Codestücke in einer massiven Integrationsphase minimiert. Wenn Sie den Schmerz ausbreiten, werden Sie ihn weniger spüren. Je öfter Ihre Teammitglieder den Code festschreiben, desto weniger müssen sie zusammenführen, da sie immer auf der neuesten Quelle sind.


2
Ich bin völlig anderer Meinung, wenn ich am Kofferraum arbeite. Wenn der Kofferraum kaputt geht, sind alle betroffen. Ich bin auch nicht einverstanden mit der Verzweigung nach einer Hauptversion. Was passiert, wenn ein Fehler zwei oder mehr Versionen betrifft, beheben Sie ihn in jeder Verzweigung?
Trasplazio Garzuglio

@ marco-dinacci: Was du sagst, kann richtig sein, wenn mehr als eine Version gleichzeitig gepflegt wird. Sie ignorieren jedoch die Tatsache, dass die Korrekturen für diese Fehler wieder in den Trunk übernommen werden. Die anderen Releases könnten dann die Änderungen übernehmen. In Bezug auf das Brechen des Kofferraums. Bevor Sie Code in den Trunk übertragen, sollten Sie sicherstellen, dass Sie über die neueste Quelle verfügen und dass Ihre Änderung den Trunk nicht beschädigt hat. Wenn es kaputt ist, sollten Sie erst festschreiben, wenn es behoben ist. Natürlich gibt es Vor- und Nachteile für die verschiedenen Ansätze.
Lionel

1

Ich habe TFS 2008/2010 noch nie verwendet, aber nach dem, was ich in verschiedenen Foren gelesen habe, ist die Verwendung von TFS zur Versionskontrolle sehr negativ. Dies hat mich bisher von TFS ferngehalten.

Ich verwende derzeit SVN und Git. Ich finde beide gut für kleine Teams oder Einzelmann-Teams, würde SVN jedoch nicht persönlich für ein großes Team empfehlen.

Ich habe PlasticSCM im Auge behalten und werde es in naher Zukunft versuchen.

Ich entschuldige mich dafür, dass ich Ihre spezielle Frage nicht beantwortet habe. Ich hätte einen Kommentar gepostet, wenn meine Privilegien es mir erlaubt hätten.


1

Ich denke, Git macht alle anderen Versionsverwaltungssoftware überflüssig. Das Verzweigen und Zusammenführen ist einfach, und wenn es Probleme gibt, wird es eingedämmt, aber viele Probleme werden vermieden, indem sehr häufiges Festschreiben, Verzweigen und Zusammenführen gefördert werden. Jeder Benutzer erhält eine vollständige Kopie des Repos (dies kann beschnitten werden, aber ich arbeite mit einer ziemlich großen Codebasis und es ist kein Problem), also gibt es so etwas wie eine automatische Sicherung. Commits / Push / Pull sind schnell und eines der wichtigsten Dinge ist, dass die Kopplung zwischen Dateiname und Tracking unterbrochen wird. Die Dateidaten, einschließlich Name und Pfad, sind ein Daten-Blob, auf den ein Baumpfad verweist, der von Pfaden unabhängig ist. Dies ist nicht nur sicherer, sondern bestimmte Arten von "Mach das nie" -Problemen in so etwas wie SVN sind kein Problem. Es kann als herkömmliche Hub-Konfiguration oder Peer-to-Peer verwendet werden, und diese Verwendungen können im selben Setup frei gemischt werden. Es ist kryptografisch sicher gegen undokumentierte Einfügungen. Und es ist sehr schnell.

Ich benutze es jetzt die ganze Zeit zu Hause, nur um Dokumente zu verfolgen und zwischen Computern zu synchronisieren, weil es einfacher ist, sie festzuschreiben und auf den Dateiserver zu übertragen, als sie auf dem Server zu sichern oder dort zu speichern.

Der Nachteil ist eine steile Lernkurve, da sie auf subtile Weise gegen alle Regeln verstößt, die die Leute bei der Quellcodeverwaltung gewohnt sind, aber es ist eine kurze steile Lernkurve.


1
Git ist wirklich gut, aber (genau wie alles) nicht die beste Lösung für alle und alles. programmers.stackexchange.com/questions/111633/…
Rook

4
Inwiefern macht Git Mercurial obsolet? Besonders in einer Windows-Entwicklungsumgebung. Es wäre besser zu sagen, dass DVCS andere VCS überflüssig macht, als eine Benzinbombe zu werfen und einen heiligen Krieg zu beginnen.
Mcottle

@mcottle - Ich würde nicht einmal so weit gehen. SVN zum Beispiel ist ein gutes Beispiel für qualitativ nicht verteiltes VCS. Wir können sagen, dass SVN CVS überflüssig macht, aber ich würde hier aufhören. Git macht SVN in keiner Weise obsolet - es ist ein völlig anderer Ansatz, der für einige gut, für andere jedoch schlecht ist (mehr siehe Link oben). Zum Beispiel "saugen" sowohl Git als auch Hg relativ mit Binärdateien.
Turm

@ldigas: Inwiefern "saugen" git und hg mit Binärdateien schlechter als svn? Weder können Änderungen in Binärdateien über die Granularität pro Datei hinaus verfolgt werden, mit allen damit verbundenen Konsequenzen. Außerdem machen beide svn größtenteils obsolet, da beide genau das tun können, was svn tut (abgesehen von ein paar obskuren Funktionen), und noch einige mehr. Sie müssen es nur so einrichten. Der beste Grund für die Verwendung von svn, den ich mir vorstellen kann, ist, dass Sie es bereits verwenden und die Migration zu schmerzhaft / riskant / teuer wäre.
tdammers

@tdammers - Ich bin nicht an einer Trolling-Diskussion interessiert. Für alle oben genannten Punkte googeln Sie ein bisschen und Sie werden ziemlich schnell auf etwas stoßen.
Turm

1

Einige der guten Praktiken, denen wir wirklich folgen und die uns sehr geholfen haben:

1) Stellen Sie sicher, dass Sie keine beschreibbare Kopie der Datei in Ihrer Region haben und dass Sie immer zum Bearbeiten auschecken. (Wenn Sie manchmal lokal arbeiten müssen, versuchen Sie, es vor EOD in der Quellcodeverwaltung zusammenzuführen.)

2) Beschriften Sie Ihre Dateien regelmäßig nach kleinen wichtigen Meilensteinen.

3) Geben Sie gute Check-out- oder Check-in-Kommentare. Dies ist hilfreich, wenn Sie eine Überprüfung durchführen. Manchmal müssen Sie die Versionen nicht öffnen und vergleichen.


1

Wie verwalten Sie Eincheckvorgänge und verhindern Funktionskonflikte und verwalten Abhängigkeiten mit der Quellcodeverwaltung ordnungsgemäß?

Aus meiner Sicht ist es eine Zwei-Faktoren-Aufgabe: Sie müssen dies von der technischen (gute und einfache und kugelsichere Verzweigung | Zusammenführung | Prüfung usw.) und der Management-Seite (gut etablierte Richtlinien "Was" "Wann" "Wie") tun. Zwei oder sogar drei Ebenen des Trenncodes in ALM: so etwas wie "stabil" (bestandene Komponententests), "instabil" (alle enthaltenen Funktionen sind abgeschlossen, aber die App als Produkt hat Fragen nach der Integration / ja, das kann passieren /) und " in Arbeit". Auf diese Weise kann ein ordnungsgemäßer Projektmanager die Interferenz der gemeinsamen Entwicklerarbeit verringern.

TFS (das ich nicht verwendet habe, verwende und nicht verwenden werde) weist einige grundlegende AFAIK-Probleme in Bezug auf den Aspekt der Quellcodeverwaltung auf. Ich verlinke hier nur einige von James McKays Texten:


1

Ein wirklich schöner und aktueller Artikel, der einige verschiedene Arten der Arbeit mit der Quellcodeverwaltung klar und präzise vergleicht und gegenüberstellt, ist hier: Quellcodeverwaltung richtig gemacht .

Ich glaube nicht, dass es eine Strategie / Best Practice für die Verwendung der Quellcodeverwaltung gibt. Ältere Teams, die schon lange zusammenarbeiten, haben in diesem Bereich weniger "Schmerzen", auch wenn sie nicht genau den gängigen "Best Practices" folgen.

Welche Werkzeuge ... Es spielt fast keine Rolle. Was wirklich zählt, ist, dass alle Mitglieder Ihres Teams hinsichtlich der Nutzung auf derselben Seite sind. Dies bedeutet, dass jeder verstehen muss, wie die Codezeile verwaltet wird und was von ihm erwartet wird. In der Praxis haben Sie normalerweise KEINE Wahl, welches Tool Sie verwenden möchten. Machen Sie das Beste aus dem, was Sie verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.