web-dev-qa-db-ja.com

CVSから空のディレクトリを削除しますか?

私はこれがどのように起こったのかよくわかりませんが、どういうわけかディレクトリの完全に空の階層が私のリポジトリで終わってしまいました:

com/
com/companyname/
com/companyname/blah/
com/Sun/
com/Sun/Java/
com/Sun/Java/jax_rpc_ri/

何が起こったのかと思いますが、これらのディレクトリにはファイルがありましたが、開発者は、ビルドプロセスの副産物であるため、そもそもチェックインすべきではないことに気付きました。ファイルですが、何とか空のディレクトリが古代の遺物としてリポジトリに残されます。

これをCVSから削除するにはどうすればよいですか? Googleで見つけることができると思われる唯一の結果は、CVSが最初にそれらを保持しないので、空のディレクトリを削除する必要はない、そして-P(プルーン)cvs updateは作業ディレクトリからそれらを削除する必要があります-リポジトリに実際に空のディレクトリがある場合、これはゼロのヘルプです。

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にもこの奇妙な動作がありますか?

36
matt b

私の知る限り、CVSプロトコルはディレクトリの削除を許可していません。サーバーコンソールに移動し、実際の物理リポジトリから削除する必要があります。


http://www.network-theory.co.uk/docs/cvsmanual/Removingdirectories.html

ディレクトリ自体は削除しません。それを行う方法はありません。

37
Jorge Ferreira

CVSのチェックアウトと更新は、常に空のディレクトリをチェックアウトします。それがCVSの構築方法です。空のディレクトリを削除するには、「-P」-「プルーン」-で更新を行います。

cvs update -dP

(「-d」を追加すると、最後の更新以降に表示された新しいディレクトリが更新されます。それ以外の場合、CVSはそれらを無視します。)

22

やった

  1. rm -rvf/localCopy/project/emptyDirectory
  2. / localCopy/project/CVS/Entriesの編集、行D/emptyDirectory ////の削除、ファイルの保存
  3. rmdir -v/CVSROOT/project/emptyDirectory

プロジェクトのemptyDirectoryを削除します。内部CVSデータを混乱させることは合法ではありませんが、機能しているようです(cvsバージョン1.12.13)。

8

CVSには多くの設計上の欠陥があり、履歴を失うことなくディレクトリを削除することはできません。履歴を失わずにファイルやディレクトリの名前を変更することも困難です。

Subversion への卒業を検討してください。 cvs2svn は、すべてのブランチとタグを含むリポジトリを変換する非常に良い仕事をします。 CVSとSVNのコマンドセットは非常に似ており、最小限の調整が必要です。 (そして、これを「どのバージョン管理を使用すべきか」戦争になることを回避するために)SVNを使用したら、 git または [〜#〜] svk [〜#〜]

4
Schwern

これは私のために働いた。基本的にあなたがするとき

rmdir -v/CVSROOT/project/emptyDirectory#CVSリポジトリディレクトリからディレクトリを削除しています。

リポジトリのUNIXサーバーログインアクセス権がある場合は、パスに移動してディレクトリを削除するか、unixチームで同じ懸念を提起できます。

4
Pramod Jaiswal

ワークスペースからディレクトリを削除することはできません。実際のリポジトリが保持されているサーバーに移動することから削除する必要があります。ただし、cvs removeコマンドを使用してディレクトリからファイルを削除できます。

1
SteveScm

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

乾杯、

ロブ

1
Rob Wells