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.
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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:
quelle
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.
quelle