Wie verzweige ich eine einzelne Datei in SVN?

8

Das Subversion-Konzept der Verzweigung scheint sich darauf zu konzentrieren, eine [un] stabile Verzweigung des gesamten Repositories zu erzeugen, auf der die Entwicklung stattfinden soll. Gibt es einen Mechanismus zum Erstellen von Verzweigungen einzelner Dateien?

Stellen Sie sich für einen Anwendungsfall eine allgemeine Headerdatei (* .h) vor, die mehrere plattformspezifische Quellimplementierungen (* .c) enthält. Diese Art von Zweig ist ein permanenter Zweig. Alle diese Zweige würden sich mit gelegentlichem Cross-Branch-Merging weiterentwickeln. Dies steht in scharfem Kontrast zu instabilen Entwicklungs- / stabilen Freisetzungszweigen, die im Allgemeinen eine begrenzte Lebensdauer haben.

Ich nicht möchte das gesamte Repository (billig oder nicht) abzweigen, da dies zu einer unangemessen hohen Menge an Wartung führen würde, um kontinuierlich zwischen dem Stamm und allen Zweigen zusammenzuführen. Zurzeit verwende ich ClearCase, das ein anderes Verzweigungskonzept hat, das das einfach macht. Ich wurde gebeten, über den Übergang zu SVN nachzudenken, aber dieser Paradigmenunterschied ist wichtig. Ich bin viel mehr darüber besorgt, dass ich einfach alternative Versionen für einzelne Dateien erstellen kann, als Dinge wie das Schneiden eines stabilen Release-Zweigs.

    
Michael Carman 22.09.2008, 20:29
quelle

8 Antworten

3

Traurigerweise glaube ich, dass ClearCase diese Situation viel besser als Subversion behandelt. Bei Subversion muss man alles abzweigen, aber ClearCase erlaubt eine Art "faule Verzweigung" Idee, die bedeutet, dass nur eine bestimmte Gruppe von Dateien verzweigt ist, der Rest folgt immer noch dem Stamm (oder welcher Zweig auch immer) Sie spezifizieren).

Die anderen hier beschriebenen Lösungen funktionieren nicht so, wie Sie es beabsichtigen. Sie kopieren die Datei einfach in einen anderen Pfad. Jetzt müssen Sie seltsame Dinge tun, um diese Datei tatsächlich zu benutzen.

Ähm, tut mir leid. Das war keine wirklich gute Antwort. Aber dafür gibt es mit Subversion keine gute Lösung. Sein Modell ist Branch und Merge.

Edit: OK, also expandiert auf was crashmstr sagte. Sie könnten dies tun:

%Vor%

Aber wow !, ist das anfällig für Fehler. Wann immer Sie eine Svn st machen, werden Sie dies sehen:

%Vor%

Ein bisschen laut, dass. Und wenn Sie ein paar Dateien oder Module in ein großes Quell-Repository verzweigen wollen, wird es sehr unordentlich.

Eigentlich gibt es hier ein anständiges Projekt, um etwas wie die verzweigten Dateien von ClearCase mit svn-Eigenschaften und Switching zu simulieren und einen Wrapper um den Standard-SVN-Client zu schreiben, um mit all dem Durcheinander fertig zu werden.

    
richq 22.09.2008, 20:54
quelle
9

Sie müssen das gesamte Repository nicht verzweigen. Sie können Zweige von Ordnern in Ihrem Projekt erstellen (z. B. einen Include-Ordner). Wie andere bereits festgestellt haben, können Sie auch nur eine einzige Datei "kopieren". Sobald Sie eine Kopie einer Datei oder eines Ordners haben, wechseln Sie zu der verzweigten Datei oder dem verzweigten Ordner, um mit der Zweigversion zu arbeiten.

Wenn Sie im Repository einen separaten Ordner für Zweige erstellen, können Sie Ihre verzweigten Dateien über serverseitige Befehle dorthin kopieren:

%Vor%

Dann könnten Sie diese Datei wechseln, um den branches_files Repository-Pfad zu verwenden

    
crashmstr 22.09.2008 20:42
quelle
3

Hier verstehe ich Ihr Problem. Sie haben den folgenden Baum:

%Vor%

und Sie müssen es für mehrere Architekturen ablehnen:

%Vor%

Auch in Ihrem aktuellen VCS können Sie dies tun, indem Sie so viele Zweige wie möglich aus time.c erstellen und wenn Sie die Dateien aus dem VCS auschecken, überprüfen Sie automatisch die neueste time.h aus dem gemeinsamen Stamm und dem neuesten time.c von der Branche, an der du arbeitest.

Das Problem, um das Sie sich sorgen, ist, dass Sie, wenn Sie SVN beim Auschecken einer Verzweigung verwenden, sehr oft time.h aus der Amtsleitung zusammenführen müssen oder das Risiko, an einer älteren Datei (im Vergleich zur Amtsleitung) zu arbeiten ist nicht akzeptabel für dich.

Abhängig von der Struktur Ihres Quellcodes könnte es jedoch eine Lösung geben. stell dir vor du hast

%Vor%

Dann können Sie / verzweigen und die Funktion svn: externals verwenden, um Ihre Header zu verknüpfen zum Kopf des Stammes. Es funktioniert nur auf Verzeichnissen und hat einige Einschränkungen in Bezug auf commit zurück zu test.h (Sie müssen in das Header-Verzeichnis gehen, damit es funktioniert), aber es könnte funktionieren.

    
Jean 22.09.2008 21:45
quelle
1

Ein Subversion "Zweig" ist nur eine Kopie von etwas in Ihrem Repository. Wenn Sie also eine Datei verzweigen möchten, tun Sie das einfach:

%Vor%     
Matt 22.09.2008 20:33
quelle
1

Ich denke nicht, dass es viel Sinn hat, eine einzelne Datei zu verzweigen? Es gibt keine Möglichkeit, es mit dem Amtsleitungscode zu testen?

Sie können stattdessen einen Patch verwenden, wenn Sie Änderungen rückgängig machen und später anwenden möchten.

    
Xian 22.09.2008 20:57
quelle
1

Sind Sie sicher, dass Sie diese Funktion wirklich in Ihrem VCS brauchen ?

?

Warum nicht den C-Präprozessor verwenden und # den Code, den Sie nicht brauchen, wegsperren? Oder irgendein ähnliches Werkzeug.

etwas wie:

%Vor%

Manchmal, wenn es nicht richtig passt, ist es nicht die richtige Lösung.

    
rlerallut 22.09.2008 21:03
quelle
0

Eine Verzweigung in SVN ist nur eine Kopie. Ich glaube, um dies so zu tun, wie Sie es sich wünschen, müssen Sie jede Version der Datei in einem separaten Verzeichnis im Repository speichern und in Ihrem Quellordner auschecken. I.E. Behandle diese Datei wie ein separates Projekt.

    
MrZebra 22.09.2008 20:35
quelle
0

Ein Zweig in Subversion ist genau das, wovon du sprichst. Alle Dateien sind eine exakte Kopie des Stamms, mit Ausnahme der Dateien, die Sie ändern. Dies ist die "billige Kopie" -Methode, über die im SVN-Buch gesprochen wird. Die einzige Einschränkung ist die Notwendigkeit, den Stamm von Zeit zu Zeit in den Zweig zu integrieren, um sicherzustellen, dass die dort vorgenommenen Änderungen in der Verzweigung widergespiegelt werden. Natürlich, wenn diese Änderungen nicht gewünscht sind, müssen keine Stamm- & gt; Zweigzusammenführungen passieren.

Ein einfacher Weg, um zu ermöglichen, dass Trunk-Änderungen automatisch zusammengeführt werden (was das Clear-Case-Paradigma simuliert), wäre die Verwendung eines Pre-Commit-Hook-Skripts, um die Trunk-Änderungen vor dem Commit zusammenzuführen ist immer eine gute Strategie, um Code-Drift zu verhindern.

    
cdeszaq 22.09.2008 21:52
quelle

Tags und Links