まだ変更をコミットしていないことを願っています。
次のコマンドを使用して、ファイルの追加を取り消すことができます。
$ svn delete --delete --keep-local $file_name
これにより、ファイルの追加が解除され、同時にファイルがドライブに保持されます。
これを使用して、すべての変更 (すべての追加を含む) を元に戻すこともできます。
$ svn revert -R .
これにより、すべてのファイルが元に戻り、追加したファイルはすべて削除されますが、何も削除されません。これにより、すでにリポジトリにあるファイルに加えられた変更も元に戻ります。ただし、チェンジリストはその日を救うことができます。
次のコマンドを使用して、Subversion で変更リストを作成することもできます。svn cl
$ svn cl FOO $file1 $file2 $file3
$ svn cl FOO $file4 $file5
FOO
これにより、上記の 5 つのファイルで呼び出される変更リストが作成されます。変更リスト名と新しいファイルを指定するだけで、変更リストに追加できることに注意してください。ファイルを削除するには:
$ svn cl --remove $file4
$file4
これにより、変更リストから削除されますFOO
。
$ svn cl BAR $file1
$file1
これにより、変更リストから削除され、変更リストFOO
に配置されますBAR
。
さて、ここにすべてが集まる場所です...
$ svn revert --cl FOO -R .
これにより、すべてのファイルが元に戻されますが、 changelist 内のファイルのみFOO
が元に戻されます。他のすべてのファイルは変更されません。したがって、追加を取り消すすべてのファイルの変更リストを作成し、その変更リストでsvn revert
コマンドを使用できます。これにより、ファイルは保持されますが、同時に追加も解除されます。
したがって、追加を取り消すすべてのファイルのチェンジリストを作成し、そのチェンジリストに対して asvn revert
を実行します。
次のようなことができます。
$ svn list | awk '$1 == A' '{print $2}' | tee files_to_unadd_list.txt
これにより、Subversion に追加されたすべてのファイルのリストが表示され、リストに追加されます。その後、そのリストを編集して、保持したいファイルを削除できます。結果は、追加を取り消すファイルのリストです。
次に、次のように処理できます。
$ while read file
do
svn revert --force --keep-local $file
done < files_to_unadd_list.txt
または、最初に変更リストを作成します。
$ while read file
do
svn cl UNADD $file
done < files_to_unadd_list.txt
次に、そのリストを調べて確認し、次のことを行います。
$ svn delete --cl UNADD -R .