Fortgeschrittene Subversionstechniken, was fehlt mir?

10

Ich habe vor ungefähr 9 Monaten angefangen, SVN zu verwenden, und es war, gelinde gesagt, ein Game Changer. Obwohl ich mich immer noch ein bisschen verloren fühle. Ich habe das Gefühl, dass ich noch viel mehr nutzen muss, um meine Anwendungsentwicklung wirklich voranzutreiben.

Zum Beispiel

Ich möchte in der Lage sein, flüchtige / größere Änderungen in eine Art "Sub-Repository" oder so etwas unter Quarantäne zu stellen. Ich stelle fest, dass größere Änderungen kleinere Fehlerbehebungen behindern, die sehr dringend sind. Wie kann ich ein einfaches Update pushen, ohne unvollständigen oder fehlerhaften Code zu pushen?

Derek Adair
quelle
3
Vielleicht möchten Sie hg für Ihre lokalen Niederlassungen verwenden (Sie können es mit svn verwenden, überprüfen Sie dies )
OneOfOne
Ha! Du vermisst Quecksilber.
DexterW
3
"Advanced Subversion" klingt wie ein Oxymoron. Verwenden Sie Git oder Mercurial, wenn auch nur lokal.
Macneil

Antworten:

7

Um Ihr Beispiel anzusprechen, haben Sie drei Möglichkeiten, dies zu tun:

  1. Sie können einzelne Dateien festschreiben. Wenn Sie eine IDE für den Zugriff auf das Repository verwenden, hat diese höchstwahrscheinlich die Ansicht, einzelne Dateien vor dem Festschreiben auszuwählen oder die Auswahl aufzuheben. In der Befehlszeile geben Sie svn commit file1 path1/file2 path2file1, path1 / file2 und jede Änderung unter path2 ein.
  2. Sie können verschiedene Arbeitskopien erstellen. Sie arbeiten an Ihrer großen Funktion in Ihrer Standardarbeitskopie und erhalten Informationen über den dringenden Fehler. Sie können Ihr Repository in ein anderes Verzeichnis auschecken und den Fehler in dieser zweiten Arbeitskopie beheben. Sie können sogar nur ein Unterverzeichnis mit der Komponente auschecken, in der der Fehler auftritt. Nach dem Bugfix können Sie Ihre zweite Arbeitskopie festschreiben, ohne Ihre Arbeit an der großen Funktion zu übernehmen. EDIT: Dieser Weg wird auch in der Antwort von Anna Lear beschrieben.
  3. Sie erstellen einen Zweig für die Arbeit an Ihrem Feature. Dazu verwenden Sie den Kopierbefehl. Wenn Sie das Standardlayout für Ihr Repository verwenden (Verzeichnisse mit dem Projektnamen und Unterverzeichnisse mit den Namen Trunk, Tags und Zweige, Trunk mit dem Projekt), können Sie den Zweig wie folgt mit dem Befehl svn-copy-create erstellen : svn copy svn://hostname/projectname/trunk svn://hostname/branches/branch-for-feature-X. Jetzt können Sie Ihre Arbeitskopie an den neuen Speicherort wechseln: svn switch svn switch svn://hostname/projectname/branches/branch-for-feature-X. Wenn Sie in den Bugfixing-Modus wechseln, übernehmen Sie Ihre tatsächlichen Änderungen, wechseln Ihre Arbeitskopie zurück in den Trunk, beheben den Fehler und das Commit und wechseln die Arbeitskopie zurück in Ihren Feature-Zweig. Wenn Sie mit der Entwicklung der Funktion fertig sind, können Sie sie wieder in den Trunk einbinden.

Für den beschriebenen einfachen Fall verwenden Sie normalerweise # 1 (ich benutze am häufigsten), manchmal # 2. Das Arbeiten mit Zweigen (Fall 3) ist komplizierter ( lesen Sie mehr ), ermöglicht jedoch mehr Tricks. Aber Zweige, die Ihrer Beschreibung eines Subrepositorys entsprechen.

Abgesehen von Ihrem Beispiel kann ich nicht viel sagen. Es gibt viele Dinge über Subversion, aber ich weiß nicht, was Sie bereits verwenden und was Sie für Ihr Projekt benötigen. Um mehr über SVN zu erfahren, ist das SVN-Buch eine großartige Ressource: http://svnbook.red-bean.com/

Mnementh
quelle
3
Das Problem mit Ansatz 1 ist, dass Sie nicht immer im Voraus wissen können, dass Ihre neue Funktion und die Fehlerbehebung nicht beide Änderungen an denselben Dateien beinhalten. Aus diesem Grund würde ich # 2 (individuelle Arbeitskopie für jede Funktion oder Fehlerbehebung) oder # 3 (individuelle Verzweigung für jede Funktion oder Fehlerbehebung) empfehlen. Zweige haben den Vorteil, dass Sie Änderungen an einem Zweig festschreiben können, bevor die Funktion oder Fehlerbehebung abgeschlossen ist, ohne dass dies Auswirkungen auf das Auschecken aus dem Trunk hat (bei separaten Arbeitskopien wirken sich alle Festschreibungen auf den Trunk aus).
Stephen C. Steel
7

Sie können Code in verschiedenen Sandboxen auschecken, anstatt nur eine Kopie zu erstellen und dort alle Änderungen vorzunehmen.

Sie könnten also eine Ordnerstruktur haben, die ungefähr so ​​aussieht:

D:\Dev\MajorFeature1
D:\Dev\Bug12345
D:\Dev\MajorFeature2

usw.

Alle diese können an derselben Stelle in Ihrem SVN ausgecheckt werden, z http://mysvnrepo/trunk.

Auf diese Weise können Sie aus Ihrer Sandbox zur Fehlerbehebung ein Commit durchführen, ohne die Entwicklung von Features zu beeinträchtigen. Sie müssen jedoch svn updateaus anderen Sandboxen ausführen , um die für die Fehlerbehebung festgeschriebenen Änderungen zu erhalten.

Adam Lear
quelle
4

Haben Sie sich Subversion Branches überhaupt angesehen?

Eine übliche Technik besteht darin, Ihren Kofferraum stabil zu halten und bei Bedarf wichtige Korrekturen vorzunehmen. Anschließend erstellen Sie für jede neue wichtige Arbeit einen Zweig . Entwickler, die an diesem Projekt arbeiten, überprüfen den Zweig und verpflichten sich zum Zweig. Dies wirkt sich nicht auf den Trunk aus, bis Sie sich entscheiden, den Zweig im Rahmen Ihrer endgültigen Integration wieder mit dem Haupt-Trunk zusammenzuführen.

Ein anderer Ansatz besteht darin, eine Verzweigung für eine bestimmte Version zu haben, um zu verhindern, dass versehentlich andere Arbeiten am Trunk ausgeführt werden, die Probleme verursachen. Sie können den 'Release Branch' nach Bedarf beheben und diese Korrekturen dann wieder in den Kofferraum zurückklappen, wenn Sie bereit sind.

Ihre Entwickler können mehrere Arbeitskopien auschecken lassen - den Trunk und alle Zweige - oder mit dem svn switchBefehl zwischen dem Trunk und einem bestimmten Zweig wechseln.

Ich empfehle nicht, viele 'Sandbox'-Arbeitskopien zu haben, die Sie separat auschecken, da (a) dies die Zusammenarbeit mit anderen verbietet und (b) es zu einfach ist, versehentlich noch nicht funktionierende Änderungen am Haupt-Trunk vorzunehmen.

JBRWilkinson
quelle
3

Die aktuelle Größe meiner Arbeitskopie beträgt 10 GB mit mehr als 50.000 Dateien. Ich kann mehrere Kopien für verschiedene Zweige haben, aber es dauert eine Weile, bis die neue Kopie erstellt ist!

Wenn ein dringender Fehler auftritt, speichere ich normalerweise alle meine Änderungen in einem Patch, setze alles zurück, arbeite an dem Fehler und verpflichte ihn und wende dann den von mir gespeicherten Patch an ... Viel einfacher und schneller als eine neue Arbeitskopie zu erhalten. Wenn ich dies oft tun müsste, hätte ich zwei Arbeitskopien: eine für langfristige Änderungen, die andere für Fehlerkorrekturen.

Xavier Nodet
quelle