2011-01-09 12 views
3

Ich verwende SVN als meine Quellcodeverwaltung mit ANKH und TortoiseSVN. Ich schreibe eine große Änderung in einem Projekt, und es dauert ein paar Tage, um die Änderung zu machen, aber in der Zwischenzeit möchte ich immer noch gelegentlich für die Sicherung verpflichten. Aber wenn ich andere Teammitglieder verpflichte, werde ich mit meiner unvollendeten Arbeit aktualisiert.Commit in SVN ohne andere zur Kasse zu lassen - ist das möglich?

Gibt es eine Möglichkeit, dass ich "für die Sicherung festschreiben kann", ohne die Revision zu ändern (damit andere nicht mit meinen Änderungen aktualisiert werden)?

Danke!

+3

Verwenden Sie einen Zweig ... – CMircea

+0

Jemand muss es sagen. :) Dies ist ein guter Grund, ein verteiltes Versionskontrollsystem wie Mercurial zu verwenden. Commit so oft wie Sie möchten, drücken Sie, wenn Sie fertig sind. –

+1

@Matthew: Commit-for-Backup ohne Push würde auch in Mercurial nicht funktionieren, da es nur lokal committen würde. – Avi

Antwort

5

ein klassischer Fall Das klingt wie feature branches zu benutzen finden. Dies hält Ihre Arbeit getrennt, aber alle anderen Vorteile von Subversion können fortgesetzt werden.

+0

Klingt ziemlich nah an dem, was ich gesucht habe! :-) Danke! – TCS

3

Um auf iconik's Kommentar zu erarbeiten:

Eines der herausragenden Merkmale von SVN ist die Fähigkeit, branch eine Lösung. Wenn Sie eine branch erstellen, erstellen Sie im Wesentlichen ein neues Repository, indem Sie den vorhandenen Code aus dem Trunk kopieren.

Während Sie an diesem Zweig arbeiten, können Sie alles mit dem Code tun, und es wirkt sich nicht auf die Amtsleitung aus. Wenn Sie mit allen Änderungen fertig sind, können Sie merge den Zweig zurück in den Stamm.

Es ist jedoch möglich für andere Leute auf der gleichen Zweigstelle, die Sie gemacht haben (wenn auch selten), aber Sie können sie bitten, nicht, und sie sollten kein Problem damit haben.

Weitere Details finden Sie in diesem SVN book

+0

seine svn's große Funktion? versuchen Sie Git-Kumpel und Sie werden sehen, wie Zweige funktionieren sollten. Svn Zweige sind schwer zu verschmelzen und Schwergewicht. Plus seine CVS-Funktion, die von Svn stolted wurde. – IAdapter

+1

Es ist immer noch eine großartige Eigenschaft von SVN unabhängig davon, wo sie es gestohlen haben. Und ich weiß, wie flexibel 'git' ist, aber darüber in meiner Antwort zu diskutieren würde die Frage nicht beantworten. – Omar

+0

Danke! :-) Ich hatte gehofft, es gäbe einen besseren Weg als die Verzweigung, denn Verzweigungen könnten sehr schmerzhaft sein! Raten Sie nicht! :-) Danke noch einmal! – TCS

1

Die obigen Kommentare sind sinnvolle Antworten. Sie können einen separaten Zweig für Ihre Änderungen erstellen, von dem die Leute wissen, dass er nicht korrekt ist (möglicherweise nicht einmal das Erstellen), und dann die Zweige wieder zusammenführen. Seien Sie gewarnt, dass dies ein schmerzhafter Prozess sein kann.

Wirklich, so etwas wird von Subversion nicht gut bedient. Einer der großen Vorteile verteilter Versionskontrollsysteme wie git, mercurial und bazaar ist, dass sie es ermöglichen, ein lokales Commit für Backup-Zwecke durchzuführen, ohne es sofort an das Haupt-Repository zu senden. Eine Option wäre also, dies doppelt zu verwalten, indem Sie auch einen DVCS-Client lokal installieren und damit lokale Commits für Sicherungszwecke durchführen. Die meisten DVCS-Clients funktionieren einwandfrei, ohne dass ein zentraler Server eingerichtet wird, sodass Sie ihn verwenden können, ohne dass es zu Konflikten mit Ihrem Subversion-Server kommt. Dies ist eine ziemlich übliche Vorgehensweise bei Entwicklern, die die Vorteile der verteilten Versionskontrolle nutzen möchten, aber in einem Unternehmen arbeiten, das eine zentralisierte Versionskontrolle verwendet.

0

Ja, verwenden Sie eine Verzweigung (mit svn Kopie). Der Teil, den er weggelassen hat, ist der, dass man einen Befehl svn merge verwendet, man kann alle Änderungen, die in der Verzweigung gemacht werden, übernehmen und auf den Stamm anwenden (vorausgesetzt, alle Zusammenführungen können ohne Konflikt ausgeführt werden). Ich habe SVN für Webinhalte auf diese Weise verwendet. Ich hatte einen Devel-Zweig (SVN-Kopie) Ich habe alle Web-Arbeit in, und wenn wir bereit waren, um zu leben, würde ich eine Svn Merge zu trunk (live) tun dann die Trunk auf dem Server bereitstellen.

Es ist ein großer Vorteil, dies zu tun mit einem der verteilten Repository-Systeme wie Mercurial (obwohl es ein gutes Produkt ist), dass Ihre Niederlassung auf dem Server ist, der zuverlässigere Festplatten und häufiger hat Sicherungen. Wenn Sie in Ihr lokales Mercurial-Repository einsteigen und Ihr Desktop-Computer stirbt, geht Ihre Arbeit verloren.Es bedeutet auch, wenn Sie mit einer ausgewählten Gruppe von Leuten zusammenarbeiten möchten (hoffentlich werden Sie einige QA beteiligt, bevor Sie den Code an den Stamm schieben !!!), können Sie dies tun, indem Sie sie auf Ihre Branche zeigen.

1

Es ist sehr nützlich, den Zweig für eine bestimmte Zeit zu "sperren", so dass andere keine Commits machen können. Für z.B. während Sie einen Build für eine Softwareversion erstellen und eine bekannte Version usw. haben möchten. Subversion bietet einen "Hook" -Mechanismus.

http://svnbook.red-bean.com/en/1.1/ch05s02.html

Sie können schreiben, „post“ oder „pre“ Haken binden und aktivieren/deaktivieren Sie die Commits zusammen mit verschiedenen anderen Aufgaben.

+0

Wenn Sie nicht in einem Zweig arbeiten, bedeutet dies, dass Sie den Stamm sperren und damit alle anderen Entwickler in Ihrem Team davon abhalten, an diesem Projekt zu arbeiten. Klingt wie eine kontraproduktive Lösung für mich –

+0

Ja - es könnte kontraproduktiv sein, wenn nicht vernünftig verwendet. Wie sie sagen "mit großen Kräften kommt große Verantwortung" :) –