web-dev-qa-db-ja.com

名前が変更されたファイル、SVNはコミットを許可しませんか?

Aptanaを使用してColdFusion Webサイトを開発しています。バージョン管理にSVNを使用しています。

いくつかのファイルの名前を変更して、そのうちの1つをコミットしようとしていますが、次のエラーが表示されます。

'SVN Commit' has encountered a problem.
org.Apache.Subversion.javahl.ClientException: Illegal target for the requested operation
svn: Commit failed (details follow):
svn: Cannot commit 'R:\myPath\My-New-File-Name.cfm' because it was moved from 'R:\myPath\My-Old-File-Name.cfm' which is not part of the commit; both sides of the move must be committed together

これは、以前のファイル(名前が変更された)と新しい名前が変更されたファイルの両方を一緒にコミットする必要があることを示しているようです。存在しないファイルをコミットするにはどうすればよいですか?

50
froadie

ファイルではなくディレクトリをコミットします。

ディレクトリは、その中に含まれるファイルのリストを含むテキストファイルと考えると、正常にコミットするには、ディレクトリ自体を更新して古いエントリを削除し、新しいエントリを追加する必要があることがわかります。これは、古いファイルを削除して新しいファイルを追加するものとしてSVNに表示されます(つまり、ファイルへの1つの変更ではなく、ディレクトリへの2つの変更)

1ファイルのみをコミットする場合は、他の変更されたファイルを一時的に無視リストに追加する必要があります。

84
gbjbaanb

さまざまなクライアントがこれを他のクライアントよりもうまく処理しているようです。

Visual StudioのAnkhSVNはこのエラーに遭遇し、対処できません。

ただし、TortiseSVN(シェル拡張)は機能します。古いファイルを削除して新しいファイルを追加することを認識しています。

したがって、Windowsを使用している場合、これを回避する簡単な方法は、ExplorerのTortiseSVNを使用してディレクトリでコミットを行うことです(古いファイル名を削除して新しいファイル名を追加します)。

12
Ray Ackley

古い名前のファイルを追加してコミットし、その後ファイルを削除して再度コミットします。

EclipseでSubversionを使用する場合、プロジェクトの十分なレベルのフォルダーでTeam-> synchronizeを実行することで、この紛らわしいエラーを回避することができました。ファイルを移動して名前を変更した場合、または何が起こっているのか正確に把握できない場合は、プロジェクトの最上位レベルで同期しても問題はありません。

これを行うと、名前が変更されたファイルの古いバージョンが同期ビューに表示されました。それらに対して「オーバーライドとコミット」を使用すると、それらは再び表示されなくなりました。この時点で、新しいものは最終的に適切にコミットされます。

6
Paul Cuddihy

ファイルの1つが名前変更される可能性があります。

エラー内のファイル名を見て、これがファイルと一致するかどうかを確認してください。

ファイル名が一致しない場合は、ファイルの名前をエラーの名前に変更し、コミットするすべてのファイルをコミットします。この後、ファイルの名前を変更して再度コミットできます。

1
MCollard

svn commit 'R:\ myPath\My-New-File-Name.cfm' 'R:\ myPath\My-Old-File-Name.cfm' -m "message"

私のために働く。また、削除されたファイルを含める必要があります。

1
rkiko

本当に混乱した場合、最も簡単な解決策は、フォルダーをリポジトリから削除してから、現在のフォームに追加し直すことです。

SVNワイプと交換:

  1. すべての変更を含むフォルダーを一時的な場所にコピーします。
  2. フォルダーでSVN Deleteを使用してから、コミットします。
  3. バックアップコピーを作業コピーにコピーしてコミットします。
0

Visual Studio 2015では、Ankh SVNの修正につまずいた。私の場合、エラーは開発中に「Form1.cs」の名前を変更した(そしておそらく移動した)ために発生しました。これにより、古い.resxファイルで問題が発生しました。

  • ソリューションエクスプローラーでプロジェクトを強調表示して、保留中の変更ビューウィンドウを開き、
  • [ファイル]> [Subversion]> [保留中の変更]を選択します
  • パスのチェックを外します
  • Subversionに必要な2つ以上のファイルを確認します。 「新しい」ものがリストにない場合は、リストに表示されるように非破壊的な方法でその内容を変更します。
  • コミットを実行します。

これがあなたのために働くことを願っています。

0
Tad Macy

IntelliJ IDEAを使用し、TortoiseSVNでコミットする場合、フォルダーがIDEAとSubversionがこのエラーを作成することによって削除されないことがあります。

その場合、それは"削除済みとしてマークしたフォルダ/ファイルをコミットしないでください"を意味します

0
Chavjoh