svnを使用してファイルの名前を変更するにはどうすればよいですか?


83

私がしようとするとsvn mv old_file_name new_file_name、I GET

 svn: Path 'new_file_name' is not a directory

正しい方法は何ですか?(申し訳ありませんが、これはとても些細なことのようですが、私は立ち往生しています)。

PS。svnバージョン1.6.11を使用

編集new_file_name現在バージョン管理下にあるファイルの名前を参照している場合にのみ、このエラーが発生するようです。この場合、もちろん、私は簡単にできます

 mv old_file_name new_file_name
 svn delete old_file_name

たぶん、あなたは完全なリポジトリのパスを必要とする、file://...またはsvn://...またはhttp://...ファイルに。
John Alexiou 2013年

回答:


111

ターゲットファイル名が既に存在するかどうかによって動作が異なります。これは通常、安全メカニズムであり、少なくとも3つの異なるケースがあります。

ターゲットファイルが存在しません:

この場合svn mv、次のように機能するはずです。

$ 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...

ターゲットファイルはすでにリポジトリに存在します:

この場合、ソースファイルの名前を変更する前に、ターゲットファイルを明示的に削除する必要があります。これは、次のように同じトランザクションで実行できます。

$ 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...

の出力でsvn statは、Rファイルが置き換えられたこと、およびファイルに履歴があることを示します。

ターゲットファイルはすでにローカルに存在します(バージョン管理さていません):

この場合、ローカルファイルの内容は失われます。それで問題がなければ、既存のファイルの名前を変更する前に、ファイルをローカルで削除できます。

$ 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...

new_fileがバージョン管理されていないという苦情があったため、svn rmnew_file_nameに--forceを追加する必要がありました。
マシューロック

..そして私はnew_file_nameと呼ばれる空のファイルを作成しなければなりませんでした。
マシューロック

4
1.8.3 RMにちょうど「SVN MVは...」十分であった、それが実行される実行されている、物理的なファイルを削除しているA D.
ソニックソウル

2
SVNがどれほど古く、それを使用してファイルの名前を変更するのがいかに厄介かはおかしいです。
ガサン2015

1
@Ghasan:質問のタイトルは誤解を招く可能性があります。それは、1つのファイルを削除し、同時に別のファイルの名前を変更することです。この使用例はそれほど一般的ではなく、特に情報が履歴に表示される必要がある場合は、ほとんどのVCSで少し注意が必要です。
nosid 2015

16

TortoiseSVNの使用は、私にとってWindowsで簡単に機能しました。

http://tortoisesvn.net/

ファイルを右クリック-> TortoiseSVNメニュー->リポジトリブラウザ->リポジトリ内のファイルを右クリック->名前の変更-> Enterキーを押す-> [OK]をクリック

SVN1.8.8の使用TortoiseSVNバージョン1.8.5


OPがWindowsについて質問していたわけではありませんが、賛成票は拡張に値します。完全なデスクトップ統合とは、エクスプローラーのコンテキストメニューでこれを実行できることを意味します。
バートン

しかし今では、明らかにLinuxの質問であるものにWindowsの回答を投稿することで、これが何度か反対票を投じられていることがわかりました。(ドラフト、元のコメントを編集する時間がなくなった)
バートン

当時、私はWindowsでCygwinを使用していたので、いくつかのクロスオーバーがありました。
storm_m2138 2015年

WindowsでTortoiseSVNを使用せずに動作させることはできませんでした。だから私はこの答えに感謝しています。私はあなたに賛成した。他のものを使用すると、更新するたびに元に戻ります。私の場合、変更はファイル名の大文字化でした。私の場合の問題は、Windowsでは大文字と小文字が区別されないという事実に起因していると思います。
ジョン

1
これは問題になりますが、ファイルの履歴は失われます。
FokTheRock 2017年

6

このメッセージは、大文字と小文字を区別しないファイルシステム(Macなど)を使用していて、名前を大文字にしようとしている場合(または大文字と小文字を変更する場合)に表示されます。この場合、名前を3番目のダミーの名前に変更する必要があります。

svn mv file-name file-name_
svn mv file-name_ FILE_Name
svn commit

0

SVNで作成/コミットする前に、ディスクに新しいディレクトリを作成した場合が考えられます。必要なのは、SVNで作成し、次の手順を実行することだけです。

$ 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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.