質問
これがどのように起こったのかはよくわかりませんが、どういうわけか完全に空のディレクトリ階層が私のリポジトリにありました:
com/
com/companyname/
com/companyname/blah/
com/sun/
com/sun/java/
com/sun/java/jax_rpc_ri/
これらのディレクトリにはファイルが含まれていたと思いますが、開発者は、ビルドプロセスの副産物であるため、最初にチェックインするべきではないことに気付きました。彼女はファイルを削除しましたが、何とか空のディレクトリがリポジトリに古代の遺物として残されています。
CVSからこれを削除するにはどうすればよいですか? Googleで見つけることができると思われる唯一の結果は、CVSが最初にそれらを保持しないので、空のディレクトリを削除する必要はないはずであり、 -P
(整理) cvs update
のオプションは、作業ディレクトリからそれらを削除する必要があります。これは、実際にリポジトリに空のディレクトリがある場合はヘルプになりません。
A cvs remove
および cvs commit
はこの状況を考慮していないようです:
$ cvs remove -Rf com
cvs remove: Removing com
cvs remove: Removing com/companyname
cvs remove: Removing com/companyname/blah
cvs remove: Removing com/sun
cvs remove: Removing com/sun/java
cvs remove: Removing com/sun/java/jax_rpc_ri
$ cvs commit com
cvs commit: Examining com
cvs commit: Examining com/companyname
cvs commit: Examining com/companyname/blah
cvs commit: Examining com/sun
cvs commit: Examining com/sun/java
cvs commit: Examining com/sun/java/jax_rpc_ri
$ ls -l com
total 24
drwxrwxr-x 2 matt matt 4096 Oct 15 14:38 CVS
drwxrwxr-x 9 matt matt 4096 Oct 15 14:38 companyname
drwxrwxr-x 4 matt matt 4096 Oct 15 14:38 sun
まだあります!
SVNにもこの奇妙な動作がありますか?
解決
CVSプロトコルでは、ディレクトリを削除できません。サーバーコンソールに移動し、実際の物理リポジトリから削除する必要があります。
http://www.network-theory.co.uk/ docs / cvsmanual / Removingdirectories.html
ディレクトリ自体は削除しません。 それを行う方法はありません。
他のヒント
CVSのチェックアウトと更新は、常に空のディレクトリをチェックアウトします。それがまさにCVSの構築方法です。 " -P"で更新を行います-"プルーン" -空のディレクトリを削除するには:
cvs update -dP
(" -d"を追加すると、最後の更新以降に表示された新しいディレクトリが更新されます。それ以外の場合、CVSはそれらを無視します。)
やった
- rm -rvf / localCopy / project / emptyDirectory
- / localCopy / project / CVS / Entriesの編集、行D / emptyDirectory ////の削除、ファイルの保存
- rmdir -v / CVSROOT / project / emptyDirectory
プロジェクトのemptyDirectoryを削除します。内部CVSデータを混乱させることは合法ではありませんが、機能しているようです(cvsバージョン1.12.13)。
CVSには多くの設計上の欠陥があり、履歴を失うことなくディレクトリを削除することはできません。履歴を失わずにファイルやディレクトリの名前を変更することも困難です。
Subversion への卒業を検討してください。 cvs2svn は、すべてのブランチとタグを含むリポジトリの変換に非常に優れています。 CVSとSVNのコマンドセットは非常に似ており、最小限の調整が必要です。 (そしてこれを「どのバージョン管理を使用すべきか」戦争になることを避けるために)SVNを使用したら、 git または SVK 。
これは私のために働いた。基本的にあなたがするとき
rmdir -v / CVSROOT / project / emptyDirectory #CVSリポジトリディレクトリからディレクトリを削除しています。
リポジトリのUNIXサーバーログインアクセスがある場合、パスに移動してディレクトリを削除するか、Unixチームで同じ懸念を提起できます。
cvsはディレクトリに関する2フェーズアプローチで動作する傾向があるため、「空のディレクトリを削除」する多くのcvsコマンドに-Pオプションがあります。
これが起こったとき、例えば追加したばかりのディレクトリの名前を変更したい場合は、ディレクトリを削除し、CVS / Entriesファイル内のディレクトリのエントリを削除します。この行の先頭には" D"が追加されます。
ジョブ完了。
コミットした場合、空のディレクトリを含む現在の作業領域がすべてチェックインされていることを確認します。次に、ディレクトリを追加した作業領域の一部を吹き飛ばします。
たとえば、
~/Sandbox/my_project/some_stuff_i_want
~/Sandbox/my_project/empty_dir_1
~/Sandbox/my_project/other_stuff_i_want
保存したいものを含む両方のディレクトリのすべてが最新であることを確認します。次に、サンドボックス内からmy_projectを吹き飛ばします。
次に、空のディレクトリをリポジトリ自体から削除します。
同じワークエリアに戻ってチェックアウトする。 my_projectは、空のディレクトリなしで作業領域を提供します。
または、すべてをそのままにして、-Pオプションを使用してCVSですべてをチェックアウト(またはすべて更新)し、空のディレクトリを削除します。
HTH
歓声、
ロブ
ワークスペースからディレクトリを削除することはできません。実際のリポジトリが保持されているサーバーに移動することからディレクトリを削除する必要があります。ただし、cvs removeコマンドを使用してディレクトリからファイルを削除できます。