背景
ファイルをエディタやファインダーから直接削除した後、svn commitを実行してもコミットされない現象が発生しました。この問題に対してどのように対処したか、備忘録としてまとめます。
原因
この問題は、ファイルシステムから物理的にファイルを削除しただけで、SVNに削除を通知していないために発生します。SVNは管理下にあるファイルが存在しないことを認識していますが、「削除する」という操作として記録されていない状態です。
この際、svn statusを実行すると、削除したファイルに!(Missing)マークが付いているのが確認できます。
解決手順
1. 削除をSVNに登録
svn remove --force ファイル名
複数ファイルがある場合は一括処理が便利です:
svn status | grep '^!' | awk '{print $2}' | xargs svn remove --force
2. 状況確認
svn status
!マークがD(Delete)マークに変わっていることを確認します。
3. コミット実行
svn commit -m "Remove unnecessary files"
予防策
今後は直接ファイルを削除せず、以下のコマンドを使用することで問題を回避できます:
svn remove ファイル名
svn commit -m "Remove file"
この方法により、ファイルの物理削除とSVNへの通知が同時に行われ、スムーズにコミットできます。