Stimmt etwas nicht mit der Versionskontrolle?

53

Ich arbeite mit einem Team von Programmierern als Business Analyst. Wir haben gerade Version 2.0 unseres Produkts veröffentlicht und arbeiten an der nächsten Version, die in 3 Monaten veröffentlicht wird (es ist ein internes Softwareprodukt). Leider hat Version 2.0 einige Probleme, die behoben werden mussten, und wir werden diese Korrekturen in ein paar Wochen bereitstellen. Das Problem ist, dass wir die Änderungen, an denen noch gearbeitet wird und die erst in drei Monaten veröffentlicht werden sollen, auch nicht bereitstellen möchten.

Die Programmierer entschieden, dass dies so gehandhabt werden sollte, dass nur der Code für die Fehler eingecheckt und der Code für die neuen Verbesserungen auf den lokalen Computern des Entwicklers aufbewahrt wird, bis sie fertig sind. Ich muss lokale Builds von ihren Rechnern zum Testen bekommen, denn wenn sie den Code einchecken und wir einen weiteren Patch herausbringen müssen, um Fehler zu beheben, möchten wir diese Verbesserungen noch nicht einbeziehen. Es gibt auch das Problem, dass dieselbe Codedatei sowohl Fehlerkorrekturen als auch Verbesserungen enthält. Sie müssen daher die Codedatei lokal kopieren, dann eine Änderung vornehmen, um einen Fehler zu beheben und diesen einzuchecken. Anschließend können Sie die Arbeit an den Verbesserungen fortsetzen, indem Sie die übernehmen lokale Kopie, die sie gemacht haben.

Es scheint ziemlich verworren zu sein - gibt es eine bessere Möglichkeit, mit dieser Art von Szenario umzugehen? Wir verwenden Team Foundation Server und Visual Studio 2010.

Ryan
quelle
113
Feuern Sie Ihre Programmierer.
Bernard
11
Geben Sie ihnen jeweils einen Zweig. Tägliche Eincheckvorgänge erzwingen.
16
@ Ryan Die einzige plausible Entschuldigung, die sie hätten haben können, wäre, wenn dies ein Legacy-Projekt für etwas wie SourceSafe gewesen wäre. Team Foundation Server 2010 ist jedoch eine wirklich gute Lösung für die Quellcodeverwaltung, die keine Probleme beim Verwalten mehrerer Zweige und beim Zusammenführen dieser Zweige mit dem Hauptzweig haben sollte. Wenn sie das nicht wissen, sind sie obszön inkompetent und sollten entlassen werden. Wahrscheinlicher ist jedoch, dass sie tatsächlich zu faul oder apathisch sind, um sich mit Zweigen und Verschmelzungen belästigt zu fühlen, sodass sie Ihnen eine Linie füttern.
maple_shaft
10
@Jan_V In SourceSafe ist nichts einfach.
maple_shaft
30
Ich kenne TFS nicht, aber diese Frage liest sich wie eine Werbung für Mercurial oder GiT.
Jim In Texas

Antworten:

77

In V2.0 sollte ein sogenannter "Steady-State-Branch" (wir haben Perforce und nicht TFS verwendet) erstellt worden sein, sobald er veröffentlicht wurde. Alle Korrekturen für v2 wurden an diesem Zweig vorgenommen und dann in den Entwicklungszweig von v3 übertragen, während auch an v3-Features gearbeitet wurde. Dh ein Fehler auf v2 würde auch auf v3 zu einem Fehler führen.

Wenn Änderungen lange Zeit auf den Computern der Entwickler gespeichert bleiben, wird dies wahrscheinlich zu einem Integrations-Albtraum führen.

James
quelle
6
MS hat ein Whitepaper
Richard
2
Und sie können immer noch eine Versionsverzweigung in TFS basierend auf dem Build datetime von v2.0 erstellen.
DaveE
2
. Ich habe diesen Blog - Post übergeben um eine Menge, ich denke , es ist sehr gut geschrieben (bezieht sich auf git, aber immer noch relevant) nvie.com/posts/a-successful-git-branching-model
BZink
50

Nun, es gibt mehrere Möglichkeiten , mit solchen Problemen umzugehen, die im Allgemeinen durch Verzweigungs-Tags abgedeckt werden und jeweils unterschiedliche Vor- und Nachteile haben.

Aber von Ihren Entwicklern gewählter Ansatz ... Ich zitiere ihn mündlich, um sicherzustellen, dass ich nicht falsch verstanden habe ...

code ... wird auf den lokalen Rechnern des Entwicklers gespeichert, bis sie fertig sind ...

... der Weg wie oben ist wahrscheinlich der einzige, der völlig falsch ist!

Was es für mich kriminell macht, ist, dass es für TFS eine hervorragende, leicht verständliche Microsoft Team Foundation Server - Verzweigungsanleitung gibt - ein umfangreiches und detailliertes Dokument mit Empfehlungen für Verzweigungsstrategien, das sorgfältig auf alle Arten von Projekten zugeschnitten und erklärt wurde ( HTML - Version) hier ).

Mücke
quelle
6
Im Ernst, die Programmierer müssen diese Team Foundation Server-Verzweigungsanleitung lesen und erst dann eine weitere Codezeile schreiben, wenn sie dies verstanden und separate Verzweigungen für 3.0-Entwickler- und 2.0-Bugfixes erstellt haben.
Carson63000
@ Carson63000 sind sich einig, dass es auch für Nicht-TFS-Leute (wie mich) lesenswert ist. Die Art und Weise, wie Microsoft-Mitarbeiter Projekte klassifizieren, und insbesondere, wie sie Faktoren festlegen, die bei der Auswahl einer geeigneten Verzweigungsstrategie zu berücksichtigen sind, sind werkzeugunabhängig und bieten ziemlich gute Denkanstöße.
gnat
40
  1. Ihre Entwickler haben ein grundlegendes Missverständnis hinsichtlich der Verwendung der Versionskontrolle.
  2. Diskutieren Sie nicht über die "richtige" Versionskontrollsoftware. Das ist nicht das Problem.
  3. Jede Code-Optimierung erschwert die Behebung des Problems.
  4. WENN Sie sich entscheiden, das Richtige zu tun, können Sie die Codeänderungen nicht fortsetzen, während Sie das Problem beheben. Sie MÜSSEN die gesamte Entwicklung stoppen und den Code in die Versionskontrolle übernehmen.
  5. Die Entwickler müssen den Schmerz so stark spüren, dass sie sich wenigstens hinsetzen und darüber reden können.
  6. Alle Versionskontrollsoftware unterstützt grundlegende Konzepte:
    • ALLER Code wird in das Versionskontroll-Repository geschrieben.
    • Alle Codedateien haben Versionsnummern. Diese Nummern werden automatisch erhöht, wenn der Code erneut eingecheckt wird.
    • Ein TAG markiert alle Codedateien einer (und einer) bestimmten Version. So können wir zum Beispiel die Softwareversion 1 mit einem TAG versehen.
    • Ein ZWEIG ist eine "Abkehr" vom Hauptstamm .
      • Alle an einem Zweig vorgenommenen Änderungen wirken sich nicht auf den Trunk aus.
      • Sie können gegebenenfalls Zweigänderungen zu einem bestimmten Zeitpunkt wieder in den Hauptstamm einbinden.
      • Auf diese Weise können wir experimentieren, ohne befürchten zu müssen, "das Gute" durcheinander zu bringen.
  7. Sie müssen die Versionskontrolle "Sprung des Glaubens" bekommen, wie ich es nenne. VERTRAUEN SIE darauf, dass das Befolgen der Grundregeln alles klar macht. Unerfahrenheit lässt uns anders denken, vertraue mir.
  8. Hier ist ein anständiges Tutorial. Es ist allgemein und vollständig genug, dass Sie nicht viele andere Quellen durchsuchen müssen

bearbeiten

  • Versionskontrolle auf Ihrem Arbeitscomputer.
    • Sie können dies jetzt ohne Teamkoordination tun
    • Auch mit Team-Versionskontrolle kann ich das nur empfehlen
    • Wenn Ihr Team Git oder Mercurial verwendet, verwenden Sie ein unabhängiges lokales Repository. So funktioniert die verteilte Versionskontrolle.
    • Sie können eine andere VC-Software Ihres Teams verwenden. Unser Team verwendet Subversion, ich verwende Mercurial lokal. Die VC-Software-Metadateien (".svn", ".mg", versteckte Ordner) stehen in keinem Konflikt.

Sie fungieren nicht als De-facto-Team-Repository. Es ist für die Verwaltung Ihrer eigenen Arbeit, Refactoring-Bemühungen usw. und CYAing selbst, während das Team weiterhin die Codebasis FUBAR.

Bearbeiten beenden

Radarbob
quelle
3
Nitpick: "Alle Codedateien haben Versionsnummern. Diese Nummern werden automatisch erhöht." Einige VCS (z. B. Subversion, Git) haben Versions-IDs pro Repository anstatt pro Datei, und die Versions-IDs sind nicht unbedingt numerisch (Git). Natürlich bleibt der grundlegende Punkt bestehen.
Sleske
Versionierung "pro Datei / pro Repo (Site)". Ja. Dies ist eine grundlegende Unterscheidung von VC-Software. Ich habe beide Arten verwendet - "country AND western" (+1 für wen auch immer diese Referenz bekannt ist). Ich mag das "Per Repo" -Modell mehr.
Radarbob
13

Was Sie beschreiben, ist eine schreckliche Möglichkeit, die Versionskontrolle zu verwenden. Es hätte eine Verzweigung für Release 2.0 oder ein Tag oder eine Kennung geben müssen. Auf diese Weise können Änderungen an dieser Version eingedämmt und weitere Entwicklungen durchgeführt werden.

Dieser Artikel kann Ihnen einige Ideen geben. Es wurde mit dem gitGedanken geschrieben, aber es gibt keinen Grund, warum es nicht auch funktionieren könnte mercurial. Mir ist klar, dass Sie keines von beiden verwenden, aber das ist auch ein Problem, das Sie in Betracht ziehen sollten, zu beheben.

jdl
quelle
9
Was ist los mit TFS?
Bernard
2
Kommt darauf an, was du erreichen willst. Vor- und Nachteile sind ein häufiges Thema bei SO. Dies ist ein anständiger Ausgangspunkt. stackoverflow.com/questions/4415127/…
jdl
4
Verteilte Versionskontrollsysteme sind nicht immer sinnvoll.
maple_shaft
3
-1: Ungeachtet dessen, was die Evangelisten behaupten, ist die verteilte Revisionskontrolle nicht die Antwort auf jedes Problem und würde dieses Problem nicht lösen.
Mattnz
3
@ Ant: Vielleicht haben Sie Recht, aber im Zusammenhang mit der ursprünglichen Frage denke ich nicht, dass es wichtig ist, ob TFS für die Quellcodeverwaltung verwendet wird. Solange TFS die Verzweigung unterstützt, sollte es vom OP-Entwicklungsteam verwendet werden.
Bernard
7

Kurzes Antwort: Entwicklungsteam sollte einen hat getrennten Produktionszweig zu entfalteten Code-Basis V2.0 getrennt von dem halten Hauptstamm.

Alle Fehlerkorrekturen müssen zuerst in diesem Zweig durchgeführt und dann getestet und in anderen Zweigen bereitgestellt werden, damit der Code synchron bleibt .

Ihr Projekt sollte auch mehrere Umgebungen for health developmentwie Prod, Staging, QA und Dev (manchmal UAT) haben. Diese Umgebungen sollten eingerichtet werden, bevor Sie mit der Produktionsfreigabe beginnen.

Alles in allem ist die Bereitschaft zu Fehlern und Änderungen die Möglichkeit, eine freigegebene Anwendung zu unterstützen.

Da TFS als Versionskontrolle erwähnt wurde, habe ich auch eine Liste von Artikeln zusammengestellt, die hilfreich sind, um die Entwicklungsumgebung (en) für den Gesundheitszustand festzulegen:

EL Yusubov
quelle
4

Nein, denn während Sie ein VCS verwenden, führen Sie keine Versionskontrolle durch.

Das zentrale Konzept für die Versionskontrolle ist die Verfolgung von Unterschieden im Zeitverlauf. Sie planen, einige Unterschiede aufzuzeichnen, aber im Moment werden die meisten Änderungen nicht aufgezeichnet.

Wie andere gesagt haben, sollten Sie Zweige verwenden. Sobald Sie dieses Setup haben, sollten Sie alle funktionalen Änderungen einchecken (dh nicht jeden Tastendruck, sondern jedes Mal, wenn Sie einen Fehler beheben, eine Funktion hinzufügen, eine Funktion löschen oder eine Änderung auf andere Weise abschließen, sodass sie weiterhin erstellt wird und funktioniert).

jmoreno
quelle
0

Ich bin ein Entwickler, und wir erhalten einen anderen Zweigcode und eine andere Datenbank für die Korrekturen der aktuellen Version sowie einen anderen für Verbesserungen und für eine spätere nachfolgende Version.

Sobald unsere Fixes fertig sind, werden sie mit der Produktion zusammengeführt und bereitgestellt. Wir erhalten einen neuen Zweig, der wieder mit den Verbesserungen arbeitet.

Außerdem folgen wir einer Übung, wie wenn ich 10 Fixes für meine aktuelle Version habe

Ich schreibe als

//Start Iteration 2, Fix No-1, Branch No-"ABC"
code where I have done changes or fixes or added new code lines
//End Iteration 2, Fix No-1, Branch No-"ABC"

In ähnlicher Weise mache ich dies bei anderen Korrekturen nur für jede Zeile, die ich zur Korrektur ändere oder hinzufüge. Und einfach vergleichen und festschreiben. Wenn sie parallel auf demselben Zweig arbeiten, können sie dies auch tun

//Start Enhancement -1, Branch No-"ABC" 
code where I have done changes of fixes or added new code lines
//End Enhancement -1, Branch No-"ABC" 

Ctrl+Shift+FBefehl und Typ //Start Iteration 2, Fix No-1, Branch No-"ABC" für die Suche in der gesamten Lösung helfen sehr, genaue Positionen, Dateien mit geändertem Code und frischen Code zu finden, nur dieser Teil kann zum Festschreiben verwendet werden.

Shilpa
quelle