Wie kann ich einen einzelnen Ordner aus einer Subversion-Repository zu einem anderen Repository verschieben?

StackOverflow https://stackoverflow.com/questions/417726

Frage

Ich habe einen "Docs" -Ordner in einer Subversion-Repository namens "Projekt". Ich bin zu dem Schluss gekommen, dass es wirklich unter einer separaten Subversion-Repository namens „project_docs“ gehalten werden sollte.

Ich möchte die "Docs" -Ordner ( und alle seine Versionen ) bewegen, um den "project_docs" Repository. Gibt es eine Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Wenn Sie Zugriff haben das Repository selbst (keine Arbeitskopie), sollten Sie in der Lage sein, den aktuellen Repository-Dump, filtern, um nur Informationen über die docs Ordner zu enthalten, und in den anderen Repository geladen werden.

Wäre so etwas wie diese:

svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./repository.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump

Ohne Zugriff auf das Repository, können Sie die Revisionsgeschichte nicht halten, und Sie haben zum Kopieren der Dateien in das neue Repository zu regeln und zu begehen.

Andere Tipps

svndumpfilter einen schweren Fehler hat - wenn eine Datei oder einen Pfad von einem Pfad kopiert wurde Sie in einer Ausfilterung bist du Filterung in, svndumpfilter wird in der Lage, füllen Sie nicht die Geschichte und die Arbeit wird fehlschlagen <. / p>

Sie können mit svndumpfilter2 wenn dieses Problem auftritt.

Dies ist in der SVN-Dokumentation diskutiert. Schauen Sie sich die Repository-Wartung Abschnitt auf svndumpfilter ... Es beschreibt speziell wie Projekte aus einem zentralen Repository entleeren und sie in neue, separate Repositorys verschieben.

Ich glaube nicht, dass Sie es tun können aus der Ferne (das heißt, ohne eine lokale Kopie). Aber dies sollte funktionieren: svn export die Ordner aus dem ursprünglichen Server, svn add es dann auf Ihre neue Repo

.

Wie:

$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit

Edit: D'oh, das die Geschichte fällt. Verwenden Sie svnadmin als Samuel beschreibt.

Für die Zukunft:

SVN Dokumentation deutlich berichtet:

Wenn Sie manuell planen zum Bearbeiten der Dump-Datei eines Top-Level-Verzeichnis zu entfernen, stellen Sie sicher, dass Ihr Editor nicht automatisch eingestellt End-of-line mit dem nativen Format-Zeichen zu konvertieren (zB \ r \ n \ n), da der Inhalt nicht mit den Metadaten übereinstimmen. Dadurch wird die Dump-Datei unbrauchbar machen.

Mit sed oder Vim dem Top-Level-Verzeichnis zu ersetzen, aber dieser Verzeichnisname wurde auch innerhalb einer Projektdatei enthält !!!! Dies führt zu einem SVN Last Prüfsummenfehler.

Also, wenn Sie diesen Vorgang ausführen, nicht tut Zeichenfolge Ersetzungen mit sed nur die Pfadnamen.

Substitute „Node-path: old_path“ mit „Node-path: new_path“. Siehe SVN Buch Kapitel 5 „Repository Administration“ für weitere Details.

Ich habe versucht, die akzeptierte Antwort zu verwenden, aber ich hatte ein riesiges Repository und ich wollte ein kleines Verzeichnis exportieren, und ich konnte nicht leisten, das gesamte Repository zu entleeren.

Also, ich exportiert nur die Revisionen, wo mein Verzeichnis geändert (Dies kann nicht funktionieren, wenn das Verzeichnis, das Sie Verweise auf andere Orte in Ihrem Repo haben exportieren möchten).

svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt
#tac for revisions in reverse (oldest revision first)
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done

#You don't have to filter if you commited only files in your directory docs in your exported revisions
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./docs_revisions.dump > ./docs_only.dump

svnadmin load /svn/new_repos < ./docs_only.dump

Sie müssen Ihre Repo-URL (URL_to_docs), Standort-Server (/svn/old_repo) und den Pfad docs in Repository (path/to/docs) ersetzen

Sie können Ihre docs_only.dump leicht bearbeiten, wenn Sie die Position Ihres doc-Verzeichnis in Ihrem neuen Repository ändern möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top