Wie kann ich die Filiale eine einzelne Datei im SVN?
Dem subversion-Konzept der Verzweigung zu sein scheint, konzentrierte sich auf die Schaffung eines [un]stabiler Gabel für das gesamte repository auf die Entwicklung. Gibt es einen Mechanismus für die Erstellung Zweige der einzelnen Dateien?
Für ein use-case -, denken Sie an eine gemeinsame header - (*.h) Datei, die mehrere Plattform-spezifische Quelle (*.c) Implementierungen. Diese Art der Verzweigung ist ein permanenter. Alle diese Zweige sehen würde, die laufende Entwicklung mit gelegentlichen cross-branch Zusammenführen. Dies steht in scharfem Gegensatz zu instabil Entwicklung/stabile release-Zweigen, die in der Regel haben eine begrenzte Lebensdauer.
Ich nicht verzweigen möchten, das gesamte repository (Billig oder nicht) wie wäre es schaffen eine unzumutbare Menge von Wartung, um kontinuierlich zu verschmelzen zwischen dem Stamm und allen Zweigen. Derzeit bin ich mit ClearCase, der hat ein anderes Konzept von Verzweigungen, die macht das einfach. Ich wurde gebeten, zu prüfen, den übergang zu SVN aber dieses Paradigma Unterschied ist wichtig. Ich bin viel mehr besorgt über die Möglichkeit, um einfach erstellen Sie Alternative Versionen für einzelne Dateien als über Dinge wie schneiden ein stable-release branch.
- Sie Hinweis in einem anderen Kommentar, dass dies nicht wirklich Ihr Fall verwenden. Nicht Wundern, wenn Antworten versuchen, dies zu lösen, verwenden Sie Fall eher als Ihre eigenen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Traurig, ich denke, die wirkliche Antwort ist hier, dass ClearCase geht mit dieser situation viel besser als Subversion. Mit subversion, Sie zu ast alles, aber ClearCase ermöglicht eine Art von "lazy branch" - Idee, die bedeutet, dass nur eine bestimmte Gruppe von Dateien sind verzweigt, die übrigen Folgen immer noch dem Stamm (oder je nachdem, welcher Zweig Sie angeben).
Den anderen Lösungen hier nicht wirklich funktionieren, wie Sie wollen, Sie sind nur die Kopie der Datei in einem anderen Pfad. Jetzt haben Sie zu tun merkwürdige Dinge, um tatsächlich nutzen, die Datei.
Erm, sorry. Das war nicht wirklich eine sehr gute Antwort. Aber es ist nicht eine gute Lösung, um diese mit Subversion. Sein Modell ist verzweigen und Zusammenführen.
Edit: OK, also die Erweiterung auf das, was crashmstr sagte. Sie könnten dies tun:
Aber wow!, ist, die anfällig für Fehler. Immer wenn du ein svn st werden Sie sehen:
Etwas verrauscht, dass. Und wenn Sie möchten Zweig ein paar Dateien oder Module, die in einem großen Quellcode-repository wird es anfangen, sich zu sehr chaotisch.
Tatsächlich, es ist wahrscheinlich eine anständige Projekt hier für die Simulation von etwas, das wie ClearCase die verzweigten Dateien mit svn-Eigenschaften und wechseln, schreiben einen wrapper rund um das Moor standard-svn-client, um sich mit all den Schlamassel.
Du musst nicht auf den Zweig, das gesamte repository. Man könnte die Zweige der Ordner in Ihrem Projekt (z.B. eine include-Ordner). Wie andere bemerkt haben, können Sie auch eine "Kopie" nur eine einzelne Datei. Sobald Sie eine Kopie einer Datei oder eines Ordners, den Sie "switch", um die verzweigten Datei oder einem Ordner zu arbeiten, auf die Zweig-version.
Wenn Sie erstellen Sie eine separate branches Ordner im repository, die Sie kopieren konnten Ihre verzweigten Dateien über den server-seitigen Befehle:
Dann könnte man wechseln, die Datei zu verwenden, die
branches_files
repository-PfadHier ist, wie ich dein problem verstanden. Sie haben die folgende Struktur:
und Sie müssen, um es abzulehnen, die für mehrere Architekturen :
Auch in Ihrem aktuellen VCS-Sie können dies tun, indem Sie, wie viele Zweige von der Zeit.c wie erforderlich, und wenn Sie Auschecken die Dateien aus dem VCS-Sie überprüft automatisch die neueste Zeit.h aus den common trunk und die neueste Zeit.c aus der Branche Sie arbeiten.
Das problem, das Sie besorgt ist, dass, wenn Sie SVN beim Check-out eine Filiale haben Sie Zusammenführen Zeit.h vom Stamm sehr Häufig oder Risiko arbeiten auf eine ältere Datei (gegenüber trunk), der Aufwand für Sie nicht akzeptabel.
Abhängig von der Struktur der Quell-code ist, könnte es eine Lösung sein, aber. Stell dir vor, du hast
Dann könnte man Zweig /, und verwenden Sie die svn:externals Funktion zum verknüpfen Ihrer Kopfzeilen, um den Rumpf auf den Kopf. Es funktioniert nur auf Verzeichnisse und trägt einige Einschränkungen hinsichtlich der Begehung wieder zu testen.h (Sie haben zu gehen in die header-Verzeichnis, damit es funktioniert) aber es könnte funktionieren.
Subversion "Zweig" ist nur eine Kopie von etwas in Ihrem repository. Also, wenn Sie wollten Zweig eine Datei, die Sie würde nur zu tun:
Ich glaube nicht, dass es viel Sinn, bei der Verzweigung einer einzigen Datei? Es gibt keine Möglichkeit es zu testen, mit der trunk-code?
Konnte man einen patch statt, wenn Sie die gewünschten änderungen und wenden Sie Sie später auf.
Sind Sie sicher, dass Sie wirklich brauchen diese Funktion in Ihrem VCS ?
Warum nicht die C-Präprozessor-und #ifdef-entfernt den code, den Sie nicht benötigen ? Oder einer ähnlichen tool.
etwas wie:
Manchmal, wenn es nicht die richtige Passform haben, dann ist es nicht die richtige Lösung.
Einen branch im SVN ist nur eine Kopie. Ich glaube, es tun die Art und Weise Sie hoffen, man müsste jede version der Datei in einem separaten Verzeichnis im repository, und schau es dir in deinen source-Ordner. I. E. Behandlung, dass die Datei wie ein separates Projekt.
Einen Zweig in Subversion ist genau das, was du redest. Alle Dateien sind eine exakte Kopie der Stamm, mit Ausnahme der, die Sie ändern. Dies ist die "billige Kopie" - Methode gesprochen, in dem SVN-Buch. Die einzige Einschränkung ist die Notwendigkeit der Zusammenführung der Stamm in den Zweig von Zeit zu Zeit, um sicherzustellen, dass die änderungen, die dort gemacht werden, spiegelt sich in der Filiale. Natürlich, wenn diese änderungen sind nicht erwünscht, keine Kofferraum->branch verschmilzt passieren müssen.
Einfache Weise zu ermöglichen, änderungen von trunk zusammengeführt werden automatisch(das simuliert den Klaren Fall-Paradigma) wäre die Verwendung eines pre-commit-hook-Skript zum Zusammenführen der änderungen von trunk in vor dem commit.(in der Tat, dies ist immer eine gute Strategie, um zu verhindern, dass code-drift).