Wie benenne ich eine Datei mit svn um?

83

Wenn ich es versuche svn mv old_file_name new_file_name, bekomme ich

 svn: Path 'new_file_name' is not a directory

Was ist der richtige Weg? (Entschuldigung, das scheint so trivial, aber ich stecke fest).

PS. mit svn version 1.6.11

BEARBEITEN Es scheint, dass ich diesen Fehler nur bekomme, wenn ich mich new_file_nameauf den Namen einer Datei beziehe, die derzeit unter Versionskontrolle steht. In diesem Fall kann ich natürlich einfach

 mv old_file_name new_file_name
 svn delete old_file_name
Walter
quelle
Vielleicht müssen Sie den vollständigen Repository - Pfad, file://...oder svn://...oder http://...in die Datei.
John Alexiou

Antworten:

110

Das Verhalten hängt davon ab, ob der Zieldateiname bereits vorhanden ist oder nicht. Es ist normalerweise ein Sicherheitsmechanismus und es gibt mindestens 3 verschiedene Fälle:

Zieldatei nicht existiert :

In diesem Fall svn mvsollte wie folgt funktionieren:

$ svn mv old_file_name new_file_name
A         new_file_name
D         old_file_name
$ svn stat
A  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Adding     new_file_name
Deleting   old_file_name
Committing transaction...

Die Zieldatei ist bereits im Repository vorhanden:

In diesem Fall muss die Zieldatei explizit entfernt werden, bevor die Quelldatei umbenannt werden kann. Dies kann in derselben Transaktion wie folgt erfolgen:

$ svn mv old_file_name new_file_name 
svn: E155010: Path 'new_file_name' is not a directory
$ svn rm new_file_name 
D         new_file_name
$ svn mv old_file_name new_file_name 
A         new_file_name
D         old_file_name
$ svn stat
R  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Replacing      new_file_name
Deleting       old_file_name
Committing transaction...

In der Ausgabe von svn stat, derR anzeigt , dass die Datei ersetzt wurde, und dass die Datei eine Geschichte hat.

Die Zieldatei ist bereits lokal vorhandenZieldatei (nicht versioniert):

In diesem Fall geht der Inhalt der lokalen Datei verloren. Wenn dies in Ordnung ist, kann die Datei lokal entfernt werden, bevor die vorhandene Datei umbenannt wird.

$ svn mv old_file_name new_file_name 
svn: E155010: Path 'new_file_name' is not a directory
$ rm new_file_name 
$ svn mv old_file_name new_file_name 
A         new_file_name
D         old_file_name
$ svn stat
A  +    new_file_name
        > moved from old_file_name
D       old_file_name
        > moved to new_file_name
$ svn commit
Adding         new_file_name
Deleting       old_file_name
Committing transaction...
nosid
quelle
Ich musste --force zu svn rm new_file_name hinzufügen, da es sich beschwerte, dass new_file nicht unter Versionskontrolle steht.
Matthew Lock
.. und ich musste eine leere Datei namens new_file_name erstellen.
Matthew Lock
4
am 1.8.3 rm entfernt die physische Datei, nur das Ausführen der "svn mv ..." war ausreichend, es führt aus, dass A D.
Sonic Soul
2
Es ist lustig, wie alt SVN ist und wie umständlich es ist, eine Datei damit umzubenennen.
Ghasan
1
@ Ghasan: Der Titel der Frage könnte irreführend sein. Es geht um das Entfernen eine Datei und das Umbenennen eine andere Datei zur gleichen Zeit. Dieser Anwendungsfall ist nicht so häufig und bei den meisten VCS etwas schwierig, insbesondere wenn die Informationen im Verlauf sichtbar sein sollen.
Nosid
16

Die Verwendung von TortoiseSVN funktionierte für mich problemlos unter Windows.

http://tortoisesvn.net/

Rechtsklick auf Datei -> TortoiseSVN-Menü -> Repo-Browser -> Rechtsklick auf Datei im Repository -> Umbenennen -> Drücken Sie die Eingabetaste -> Klicken Sie auf OK

Verwenden von SVN 1.8.8 TortoiseSVN Version 1.8.5

Storm_m2138
quelle
Nicht dass das OP nach Windows gefragt hätte, aber Upvotes verdienen eine Erweiterung: Vollständige Desktop-Integration bedeutet, dass Sie dies einfach im Kontextmenü des Explorers tun können.
Barton
Aber jetzt sehe ich, dass das Posten einer Windows-Antwort auf eine eindeutig Linux-Frage diese Frage mehrmals abgelehnt hat. (Drats, die Zeit lief mir davon, meinen ursprünglichen Kommentar zu bearbeiten)
Barton
Ich habe damals Cygwin unter Windows verwendet, daher gab es einige Überkreuzungen.
Storm_M2138
Ohne TortoiseSVN unter Windows konnte ich es nicht zum Laufen bringen. Deshalb bin ich für diese Antwort dankbar. Ich habe dich gestimmt. Wenn Sie etwas anderes verwenden, wird es bei jeder Aktualisierung wiederhergestellt. In meinem Fall war die Änderung die Großschreibung der Dateinamen. Ich denke, das Problem in meinem Fall beruht auf der Tatsache, dass Windows die Groß- und Kleinschreibung nicht berücksichtigt.
Jon
1
Dies funktioniert, aber Sie verlieren den Verlauf der Datei.
FokTheRock
5

Diese Meldung wird angezeigt, wenn Sie ein Dateisystem verwenden, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird (z. B. auf einem Mac) und versuchen, den Namen (oder eine andere Änderung der Groß- / Kleinschreibung) groß zu schreiben. In diesem Fall müssen Sie in einen dritten Dummy-Namen umbenennen:

svn mv file-name file-name_
svn mv file-name_ FILE_Name
svn commit
Superk
quelle
0

Dies kann der Fall sein, wenn Sie ein neues Verzeichnis auf der Festplatte erstellt haben, bevor Sie es im SVN erstellen / festschreiben. Alles, was Sie brauchen, ist es einfach in SVN zu erstellen und danach zu verschieben:

$ svn mv etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/
svn: E155010: Path '/home/dyr/svn/nagioscore/etc/nagios/hosts/us0101/ccs' is not a directory

$ svn status
?       etc/nagios/hosts/us0101/ccs

$ rm -rvf etc/nagios/hosts/us0101/ccs
removed directory 'etc/nagios/hosts/us0101/ccs'

$ svn mkdir etc/nagios/hosts/us0101/ccs
A         etc/nagios/hosts/us0101/ccs

$ svn move etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
A         etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
D         etc/nagios/hosts/us0101/cs/us0101ccs001.cfg

$ svn status
A       etc/nagios/hosts/us0101/ccs
A  +    etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
        > moved from etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
D       etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
        > moved to etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
Denis Yusupov
quelle
-4

Sie können dies in drei Schritten tun:

 - svn rm old_file_name
 - svn add new_file_name
 - svn commit
Pradip Das
quelle
4
Dieser Ansatz ist nicht gut, weil er den Verlauf der Datei verliert
user2913094