Subversion: Kann ich auschecken, ändern und dann einen Zweig daraus machen?

80

Ich habe eine Kasse von meinem Kofferraum zu einem lokalen DIR gemacht und dort viele lokale Änderungen vorgenommen. Jetzt möchte ich es nicht wieder in den Trunk übertragen, sondern lieber einen Zweig aus dieser lokalen Version erstellen. Ist das möglich?

Kann ich den Trunk einfach in einen Zweig und dann cd DIRund svn switchin den Zweig kopieren ?

UPDATE : Danke für die Antworten, es hat funktioniert! Um die Schritte zusammenzufassen:

  • cd DIR
  • svn copy . new-branch-URL
  • svn switch new-branch-URL .

(Beachten Sie die Punkte)

Frank
quelle
Ja, du kannst. Ich benutze tortoiseSVN und du kannst es damit machen.
Nick
Ich habe bei der Verwendung zu viele Konflikte festgestellt svn switch, daher habe ich mich entschlossen, die neue Kopie von später new-branch-URLauszuchecken svn copy.
fikr4n

Antworten:

39

Entsprechend der Befehlszeilenhilfe kann svn copy von einem Verzeichnis in eine Repository-URL kopieren. Sie sollten also in der Lage sein, Ihre Arbeitskopie in die Zweigstelle zu kopieren, z.

svn copy working_directory url_to_branch
wierob
quelle
52

Das SVN-Buch ( http://svnbook.red-bean.com/de/1.6/svn-book.html#svn.branchmerge.using.create ) empfiehlt nicht, einen Zweig aus der lokalen Arbeitskopie zu erstellen.

Es ist zwar auch möglich, einen Zweig zu erstellen, indem svn copyein Verzeichnis innerhalb der Arbeitskopie dupliziert wird. Diese Technik wird jedoch nicht empfohlen. Es kann tatsächlich ziemlich langsam sein! Das Kopieren eines Verzeichnisses auf der Clientseite ist eine zeitlich lineare Operation, da tatsächlich jede Datei und jedes Unterverzeichnis in diesem Arbeitskopieverzeichnis auf der lokalen Festplatte dupliziert werden muss.

Erstellen Sie stattdessen zuerst den Zweig und verwenden Sie dann den svn switchBefehl, damit Sie Ihre Änderungen festschreiben können. Wenn Ihre Arbeitskopie mit dem Trunk erheblich veraltet ist, fügen Sie "@REV" an die Quell-URL an, wobei "REV" die Revision Ihrer Arbeitskopie ist, die von gemeldet wird svn info.

Das Kopieren eines Verzeichnisses auf dem Server ist jedoch eine zeitlich konstante Operation, und auf diese Weise erstellen die meisten Benutzer Zweige.

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/my-calc-branch \
      -m "Creating a private branch of /calc/trunk."
Lucas
quelle
2
Danke für diese Antwort. Dies ist die bessere Lösung, da der Revisionsverlauf beibehalten wird.
Evansflash
3
Bedeutet das, dass ich, wenn ich Änderungen an meiner lokalen Arbeitskopie hatte, svn copy <trunk-URL> <newBranch-URL>den Trunk in einen neuen Zweig auf dem SVN-Server svn switchkopieren und dann in meiner Arbeitskopie zum Wechsel zum neuen Zweig verwenden könnte, ohne Änderungen zu verlieren? Oder würde der Switch meine nicht festgeschriebenen geänderten Dateien töten?
Kasapo
3
@ Kasapo, ja das stimmt. und beachten Sie auch, wenn Sie mit dem Kofferraum nicht mehr auf dem neuesten Stand sind. Wenn ja, fügen Sie "@REV" zur Quell-URL hinzu, wie ich bemerkt habe, damit nach dem Wechsel zum Zweig nur Ihre lokalen Änderungen als Unterschiede angezeigt werden.
Lucas
Lassen Sie mich nur einen sehr nützlichen Link hinzufügen, der die Lösung von Lucas ausführlicher erklärt: svnbook.red-bean.com/de/1.6/svn.branchmerge.switchwc.html (siehe das Informationsfeld unten). Dies ist in der Tat die sauberste und bequemste Lösung, um aus lokalen Änderungen einen Zweig zu erstellen.
Spiros
9

In meinem SVN-Client: TortoiseSVN reicht es aus, um:

  • Klicken Sie mit der rechten Maustaste auf das oberste Verzeichnis, das ich verzweigen möchte
  • Wählen Sie unter "An URL" das Zweigstellenverzeichnis in Ihrem Repository aus
  • im Rahmen "Kopie im Repository erstellen aus:" wählen Sie "Arbeitskopie"

erledigt :)

Es ist wie beim Kopieren der lokalen Version in die angegebene Repository-URL.

twk
quelle
1

Ja, Sie können dies sowohl über die SVN-Befehlszeile als auch über tortoiseSVN tun .

Sie müssen Ihre SVN-Arbeitskopie als src und Ihren neuen Zweig als Ziel der angeben

svn copy <file/path/to/working/copy> <URL/TO/REPOSITORY/BRANCH>

Befehl.

Zeigen Sie in TortoiseSVN einfach auf Ihre Arbeitskopie, wählen Sie "Verzweigen / Tag" aus dem Kontextmenü und wählen Sie "Arbeitskopie" im Abschnitt "Kopie im Repository erstellen aus:".

Beachten Sie, dass es aus Gründen der Rückverfolgbarkeit keine gute Idee ist, Tags so zu erstellen, aber für Zweige ist dies vollkommen in Ordnung.

Peter Parker
quelle