2009-06-15 11 views
1

Ich habe ein Projekt auf Codeplex und ich versuche, die Baumstruktur zu reorganisieren, so dass es ein wenig sinnvoller und einfacher ist, mit zu arbeiten.Ordner in SVN verschieben, ein bisschen Mühe haben

Dies ist mein aktuelles Layout:

TopLevel 
|-->src 
    |--->ProjectA //This is where all the files are held 
     |-->Core //plus three more folders 
|-->MyProject.Core 
    |--->trunk 
     |-->src // I want to move all the folders and files in ProjectA into here 

Deshalb möchte ich alle Ordner und Dateien unter ProjectA zu ProjectA.Core/Trunk/src bewegen.

Ich überprüfte den gesamten Quellbaum und zog mit der rechten Maustaste die Ordner unter ProjectA Ordner und wählte "versionierte Dateien hier verschieben" in den src Ordner, der die Ordner in Project zum Löschen markierte, aber die neuen Dateien in src hatten immer noch den Grünes Häkchen daneben und nicht die blaue Plus-Taste.

Nachdem ich die Änderungen vorgenommen habe, habe ich im Repo-Browser nachgesehen und gesehen, dass die Ordner nicht verschoben wurden und sich noch im ProjectA-Ordner befanden.

Wie kann ich Ordner und die Dateien in diesen Ordnern in einen anderen Ordner in Subversion verschieben? Ohne den Versionsverlauf zu verlieren.

Ich benutze TortoiseSVN.

EDIT: Es stellt sich heraus, es muss Codeplex gewesen sein, ich habe mein Projekt auf Google-Code verschoben und alles funktioniert gut.

Antwort

2

Ich weiß nicht, was ich dachte, als ich vorschlug, die Dateien zu exportieren und zu importieren. Ich glaube, ich war zu lange von TortoiseSVN weg. Ich erinnere mich, dass Tortoise Svn tatsächlich a really easy method des Verschiebens ganzer Verzeichnisse hat. Es ist nicht nur offensichtlich ... aber es ist nicht klar, warum Sie das Ergebnis nicht korrekt in das Repository übertragen können. Vermutlich haben Sie auf dem übergeordneten Ordner alle diese Ordner festgelegt.

Hier ist die Zusammenfassung: Sie müssen wählen Sie den Ordner und Dateien, die Sie verschieben möchten, und nach dem Einschalten der Auswahl so Rechtsklick machen und ziehen Sie es mit der rechten Taste auf die neue Position. Sie erhalten ein Kontextmenü, in dem Sie gefragt werden, ob Sie die Dateien im Repository verschieben möchten. Dies behält die Geschichte bei. Jetzt sind Ihre alten Dateien zum Löschen markiert und Ihre neuen Dateien sollten als hinzugefügt markiert werden. (Ich habe festgestellt, dass die Statussymbole nicht immer repräsentativ für den wahren Status sind). Übernehmen Sie dies als einen Commit. Ich mag sei wählerisch und verwenden Sie die Überprüfung auf Änderungen auf der Wurzel der ausgecheckten Dateien, und wählen Sie dann genau, welche Änderungen ich vor, bevor Sie dies tun möchten.

Wenn Sie nur einen Ordner wie diesen verschieben, öffnen Sie ein Fenster, das ein Elternteil dieses Ordners ist, und ein anderes Fenster, das der neue Elternteil dieses Ordners sein wird. Rechtsklicke und ziehe alles in einer Bewegung. Ich kann nicht glauben, dass es so viel Text braucht, um eine einfache Mausaktion zu beschreiben.

+1

Subversion macht es einfach, Dateien und sogar ganze Verzeichnisbäume beliebig zu verschieben. Die Export/Import-Methode ist für Subversion völlig ungeeignet. Also -1 für deine Antwort. Nun, obwohl die ursprüngliche Reorganisationsfrage mit dem Befehlszeilenclient von Subversion einfach zu erledigen ist, habe ich keinen einfachen Weg gefunden, dies mit TortoiseSVN zu tun. –

+0

Ok, dein Update schlägt nicht mehr vor Export/Import und mein vorheriger Kommentar gilt nicht mehr so ​​+1. :) –

+0

Ich habe versucht, was Sie und Greg vorgeschlagen haben, aber nachdem ich es festgeschrieben habe, löscht es nicht die Ordner oder fügt die neuen hinzu. Ich denke, es könnte ein Problem am Codeplex-Ende sein, denn selbst wenn ich die Ordner im Repobrowser verschiebe, werden die Ordner nicht verschoben. Das fängt an, meinen Commit-Verlauf wirklich zu durcheinander zu bringen :( –

0

Die Standardstrategie für den Umgang mit unangenehmen Moves ist, im schlimmsten Fall alle neuen Verzeichnisse zu erstellen, nur die Dateien aus den alten Verzeichnissen in die neuen Verzeichnisse zu verschieben und dann alle alten Verzeichnisse zu entfernen. Dies sollte fast jedes Problem umgehen, dem Sie begegnen, und Sie können Verknüpfungen verwenden (ganze Verzeichnisse und/oder Bäume verschieben), wo das funktioniert.

Dadurch wird der Verlauf aller Dateien beibehalten. Es wird nicht den Verlauf von Verzeichniserstellungen beibehalten, aber normalerweise können Sie damit leben, da Sie einen Verlauf für alle Dateiverschiebungen haben, einschließlich der alten und neuen Verzeichnisnamen.

+0

Sieht so aus, als müsste ich es vielleicht so machen: "(.) Weil man versucht, all diese Ordner zu verschieben, kann es Dinge kaputt machen. –

+0

Sie können Verzeichnisse in Subversion ganz einfach verschieben, ohne Geschichte zu verlieren Dateien verschieben, ohne Geschichte zu verlieren –

+0

Tatsächlich ist es manchmal nicht so einfach, Verzeichnisse zu verschieben, und Sie sind gezwungen, die Bewegungen über mehrere Commits hinweg auszuführen, beispielsweise möchten Sie foo, ausgenommen foo/src, in bar verschieben und foo/src zu foo. Sie können dies nicht in einem einzelnen Commit ausführen, es sei denn, Sie führen keine Verzeichnisverschiebungen durch. –

2

Diese Art der Reorganisation ist mit dem Subversion-Befehlszeilenclient einfach zu bewerkstelligen. Dies könnte eine praktikable Option für Sie sein. Hier ist die Befehle, die es tun würde (aus dem Hauptverzeichnis):

svn mv src/ProjectA MyProject.Core/trunk/src/ 
svn ci -m "relocate ProjectA" 

Sie auch beide Befehle in einer durch die Verwendung von URLs als Quelle und Ziel kombinieren, finden Sie in der svn mv Dokumentation.

Ich habe keine einfache Möglichkeit gefunden, so etwas mit TortoiseSVN zu tun, also wenn ich brauche, verwende ich einfach den Befehlszeilen-Client, um es zu tun.

+0

Ich werde das herunterladen und es versuchen. Manchmal ist es besser, einfach mit der Befehlszeile zu bleiben und die GUI zu entfernen. –

+0

Warum hat das einen Downvote? –

Verwandte Themen