2010-05-02 13 views
35

Ich habe den Fehler gemacht, ein Subversion-Repository ohne die üblichen Verzeichnisse trunk, branches und tags zu erstellen. Das heißt, das Stammverzeichnis des Projekts wird dem Stammverzeichnis des Repositorys zugeordnet. Jetzt möchte ich einen Feature-Zweig erstellen, aber es gibt keinen guten Platz dafür. Was ich tun möchte, ist / zu /trunk verschieben, unter Beibehaltung seiner Eigenschaften und Geschichte. Habe ich kein Glück?Gibt es eine saubere Möglichkeit, sich zu bewegen?

Antwort

33

Der saubere Weg, dies zu tun, ist svnadmin mit dem gesamten Repository

svnadmin dump 

Dann an der Wurzel ein neues Repository mit dem Stamm-Verzeichnis erstellen mit Dump aus, und legen Sie den Dump mit

svnadmin load --parent-dir trunk

Wenn Sie einen Svn-Umzug machen, dann wird das Dinge vermasseln, wenn Sie jemals eine Revision vor dem Umzug aktualisieren, da die Dateien zurück zu ihrem vorherigen Standort bewegt werden, was wahrscheinlich nicht das ist, was Sie wollen.

+0

-1 Keine Notwendigkeit, zu solchen Längen zu gehen: Bewegen Sie einfach den ganzen Baum. – sleske

+2

@sleske - Ich habe genau dieses Problem zuvor behandelt - siehe meine Notiz über die Probleme, einen svn move zu machen. Dies ist der richtige Weg, es zu tun. –

+0

Ich hatte keine Chance, dies zu versuchen, aber es klingt genau nach der Lösung, nach der ich suche. – Metaphile

1

Kannst du nicht einfach das Trunk Verzeichnis erstellen und alles von/nach Trunk verschieben?

1

Wie die anderen Antworten zeigen, wird dies einfach durch einen svn mv in das Stammverzeichnis getan. Um dann Ihre Arbeitskopie zu aktualisieren, sehen Sie sich den Befehl svn switch an.

+0

Dies scheint zu m ake am meisten Sinn, ich wünschte, ich könnte abstimmen^3 +. Ich bin mir nicht sicher, welche Kommandozeilenbefehle unter dem Deckblatt passiert sind, aber mit TortoiseSVN habe ich Repo-Browser verwendet, um ein "trunk" -Verzeichnis zu erstellen und dann die versionierten Inhalte per Drag & Drop in das Stammverzeichnis mit "Move to trunk" zu ziehen . Alle Protokolle wurden beibehalten. Ich habe es versäumt, svn switch zu verwenden, ich habe gerade das .svn-Metadatenverzeichnis gelöscht und neu ausgecheckt, aber ich bin mir sicher, dass svn switch mehr Sinn ergeben hätte. –

1

Nein, erstellen Sie einfach einen Ordner trunk und verschieben Sie den gesamten Inhalt des Stammverzeichnisses. Sie können es vom Explorer oder über den Repobrowser ausführen, der Verlauf bleibt erhalten.

2

Sie müssen /trunk erstellen und eine svn move aller Inhalte von root innerhalb der Stamm und dann commit.

Danach werden Sie switch Ihre Arbeitskopie zu /trunk.

2

Der einfachste Weg wäre, ein "Trunk" -Verzeichnis zu erstellen, dann verschiebe alles andere hinein. Sie müssen alle Eigenschaften manuell kopieren, aber es sollte keine große Sache sein. Die Geschichte ist pro Datei, also sollte es bleiben.

Das andere Problem ist, ob jemand anderes das Repository geöffnet hat. Es wird schwierig sein, zusammenzuführen, also vergewissern Sie sich, dass alle Ihre Änderungen eingecheckt haben, bevor Sie dies tun.

+0

+1 für die Berücksichtigung von Problemen im Fall einer Zusammenführung – sleske

+1

Es ist der einfachste Weg, aber Sie müssen aufpassen, dass, wenn Sie vor dem Umzug auf eine Revision aktualisieren, unerwartete Dinge passieren (Ihre Arbeitskopie wird sich selbst löschen;)) –

+0

Einverstanden. Es ist etwas komplizierter, 'svnadmin' zu verwenden, aber die Ergebnisse sind besser und die Probleme bei der Zusammenführung sind nicht schlechter als bei der naiven Methode. Ich habe deine Antwort gewählt. –

-2

Ein schnelles Beispiel, wie ich es gemacht habe.

wollte ich file:///svn/myRepo zu file:///svn/myRepo/trunk

cd/ 
svnadmin dump /svn/myRepo > my.dump 
killall svnserve 
sudo rm -r -f /svn/myRepo 
svnadmin create /svn/myRepo 
svnserve -d -r /svn 
svn mkdir file:///svn/myRepo/trunk -m "Created trunk dir" 
svnadmin load /svn/myRepo --parent-dir trunk < my.dump 
26

therefromhere's answer, Gebrauchtwagen, die gut funktioniert, aber ich wollte die Befehle einschließlich der Parameter hinzuzufügen, das heißtwie auf dem SVN-Server Kommandozeile ausgeführt:

  1. Dump Ihre vorhandenen Repository in eine Datei:

    svnadmin dump /path/to/myrepo/ > /some/dir/myproject.svndump 
    
  2. Create ein neues Repository:

    svnadmin create /path/to/mynewrepo/ 
    
  3. Add der trunk/ Ordner und commit es, in der Arbeitskopie Verzeichnis:

    mkdir trunk; svn add trunk; svn commit trunk -m "Add: trunk folder" 
    
  4. Load die dumpfile in das neue Repository mit trunk als parent-dir:

    svnadmin load --parent-dir trunk /path/to/mynewrepo/ < /some/dir/myproject.svndump 
    
+3

Es ist leicht in den Anweisungen zu verpassen, aber das sollte auf dem * Server * ausgeführt werden, nicht die Arbeitskopie. Andernfalls erhalten Sie "Datei kann nicht geöffnet werden"/Pfad/zu/Mein Repo/Format ': Keine solche Datei oder Verzeichnis. " – DavGarcia

Verwandte Themen