2009-08-14 12 views
3

Ich komme nur zurück zu Subversion nach der Verwendung von TFS für eine gewisse Zeit und im Allgemeinen bin ich ziemlich aufgeregt :)Subversion und gemischte Revisionen: Rezept für kaputte Builds?

Es gibt eine Sache, die ich anders erinnere. Ich kann mich nicht erinnern, dass ich aus einer veralteten Arbeitskopie herauskommen konnte. Oder vielleicht versagt mir meine Erinnerung an der Definition von "veraltet". Ich dachte "veraltet" bedeutet, dass jede Datei berührt wurde, seit ich meine Arbeitskopie zuletzt aktualisiert hatte, und nicht nur, dass eine Datei berührt wurde, die ich lokal berührt hatte (was ich einen Konflikt nennen würde).

Der Grund, warum ich dies als ein Problem sehe, ist, dass es sehr leicht ist, den Build zu "brechen", wenn ich meine Änderungen beglaubigen kann, ohne zuerst mit den von anderen gemachten Änderungen zu integrieren.

Also wurde diese gemischte Revisions Sache neu hinzugefügt oder ist es nur ich?

+0

Ihr Speicher ist in der Tat fehlgeschlagen - Ihre Definition von "veraltet" war nie wahr für SVN, oder tatsächlich, irgendein anderes VCS, das ich gesehen habe. Es wäre sehr unpraktisch, wenn es wäre! –

Antwort

1

Kurze Antwort: Im Allgemeinen ist es eine gute Übung, Builds zu erstellen, die die Entwicklertische von einem frisch ausgecheckten Tag verlassen sollen. Wenn möglich, auf einer separaten Maschine.

Wenn Sie dieser Regel folgen, können Sie besser schlafen.

Etwas längere Antwort: Das heißt, bevor Sie eine Veröffentlichung machen müssen Sie Ihre Arbeitskopie aktualisieren, bauen, führen Sie alle Tests, und wenn Sie zufrieden sind, erstellen Sie eine Kopie (ein Tag) daraus. Weisen Sie dann die Erstellungsmaschine an, aus einem neuen Checkout dieses Tags einen Build zu erstellen. Das Ergebnis des Builds übergeben Sie an die Testabteilung.

Wenn Sie später eine bestimmte Version abrufen müssen, haben Sie immer dieses Tag zum Auschecken. Wenn diese Version mit "tags/release_4.2.0" markiert ist und Sie eine Korrektur vornehmen müssen, kopieren Sie das Tag in einen Zweig ("branches/release_4.2.1") und reparieren Sie es dort. Wenn Sie sicher sind, dass es wie erwartet funktioniert, verschieben Sie den Zweig zu "tags/release_4.2.1". Lassen Sie die Build-Maschine erneut dieses Tag auschecken, erstellen Sie den Code und übergeben Sie ihn dem Testen.

1

Die Fähigkeit, zu solch einer "gemischten" Revision zu kommen, erscheint mir nicht als inhärent unsicher. Selbst wenn Sie ein VCS verwenden, bei dem alle Dateien vor einem Commit vollständig aktuell sein müssen, kann das VCS nicht überprüfen, ob Sie tatsächlich den Code kompiliert oder alle Komponententests ausgeführt haben. Solche Dinge sollten von Entwicklern und einem kontinuierlichen Integrationssystem abgedeckt werden.

Subversion hat eine sehr dateizentrische Sicht auf die Welt, ähnlich wie sein CVS-Vorgänger. Sie können eine bestimmte Revision einer bestimmten Datei auschecken, ohne die zugehörigen Dateien zu berühren. Dies steht im Gegensatz zu anderen Systemen wie Git (ich bin mit den Besonderheiten von TFS nicht vertraut), wo die spezifischen ausgecheckten Revisionen einzelner Dateien nicht verfolgt werden. Stattdessen ist der gesamte Checkout eine Ansicht des Repositorys an einem bestimmten Punkt in seiner Geschichte, und Abweichungen davon werden als neue Änderungen betrachtet. Natürlich ist es immer noch frei, so viele oder so wenige dieser neuen Änderungen zu übernehmen, wie Sie möchten, mit der Möglichkeit, den Build zu brechen, wenn Sie nicht die richtige Kombination wählen.

3

Es ist Ihnen, da es wie folgt ;-)

schon immer Ihr fehl begehen, wenn eines der Elemente Sie ist out-of-date zu begehen sind, und lassen die Repository hat eine ‚allgemeine 'Revisionsnummer, aber solange alles, was Sie zu verpflichten sind, auf dem neuesten Stand ist, können Sie festschreiben. Das bedeutet natürlich nicht, dass es eine Best Practice ist.

Denken Sie daran, dass svn nicht nur in der Softwareentwicklung verwendet wird. Im Allgemeinen ist diese Fähigkeit wahrscheinlich gut zu haben.

Und außerdem arbeitet AFAIK TFS in dieser Hinsicht sehr ähnlich, oder?

+0

Ja, SVN und TFS haben das gleiche Verhalten in diesem Bereich (und viele andere, wirklich). –

+1

Vereinbart, dass SVN ein allgemeines Versionskontrollsystem ist. Nachdem ich das gesagt habe, fand ich es für Leute, die nicht so computeraffin sind, nicht so einfach. Sparsamer Checkout zum Beispiel ist nicht so intuitiv. Das Konzept von Tags, Stamm und Zweig ist auch für nicht softwarebezogene Versionskontrollen nicht sehr nützlich. – devXen

+0

@Chenster: Sie haben völlig Recht – jeroenh

0

Nein, Sie können nicht svn out-of-date-Dateien festschreiben. Lesen Sie dieses: http://subversion.tigris.org/faq.html#wc-out-of-date

+1

Die Frage ist nicht darüber. Es ist möglich, ob eine (aktuelle) Datei A festgeschrieben werden kann, wenn Datei B in der Nähe aus demselben Repository nicht aktuell ist (aber nicht geändert wurde). –

+1

Sie können die Datei A einzeln festlegen (Tiefe). Die Datei B kann sich in einer älteren Revision befinden, solange Sie nicht beide Dateien gleichzeitig festschreiben. – devXen

0

Danke für das Aufräumen, Jungs. Wenn ich darüber nachdenke, würde ich vorschlagen, dass das, was ich vorgeschlagen habe, sowieso auf der Client-Seite implementiert wird ... und ich verstehe, dass es immer noch Sache der Entwickler wäre, sicherzustellen, dass alles kompiliert wird. In der Realität war das kein großes Problem, aber es gab mehrere Male, dass ein Entwickler eine Arbeit verrichtet hat, ohne zuerst seine Arbeitskopie zu aktualisieren, was zu einer kaputten Kopfrevision führte.

Auf einer Seite zur Kenntnis, wie dieses Beispiel aus der Schildkröte. http://tortoisesvn.net/node/13

„Nun, wenn Sie File2 ändern und versuchen, zu begehen, schlägt es der Kunde das Repository erzählt, dass File2 in Revision 2 mit lokalen Änderungen , aber das Repository befindet sich bereits in Revision 3. Wenn Sie dann ein Update durchführen, wird File2 ebenfalls in Revision 3 sein (und natürlich sind Ihre lokalen Änderungen immer noch da). "

Ich bekomme eigentlich nicht die "veraltete" Nachricht, aber Sie sollten denken, dass dies irgendwann der Fall gewesen wäre?

Verwandte Themen