1. ホーム
  2. svn

[解決済み] svnを使用してファイル名を変更するには?

2023-04-20 08:16:24

質問

私が svn mv old_file_name new_file_name を試すと、次のようになります。

 svn: Path 'new_file_name' is not a directory

正しい方法は何でしょうか?(すみません、些細なことのようですが、行き詰まっています)。

PS.svnバージョン1.6.11を使用しています。

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

 mv old_file_name new_file_name
 svn delete old_file_name

どのように解決するのですか?

対象となるファイル名がすでに存在するかどうかで、動作が異なります。これは通常安全機構であり、少なくとも 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...