36

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

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

4

7 に答える 7

38

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


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

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

于 2008-10-15T14:54:04.603 に答える
22

CVS のチェックアウトと更新は常に空のディレクトリをチェックアウトします。それが CVS の構築方法です。"-P" -- "prune" -- を使用して更新を行い、空のディレクトリを削除します。

cvs update -dP

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

于 2008-10-15T14:55:45.130 に答える
8

やった

  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)。

于 2009-11-04T14:03:57.997 に答える
4

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

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

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

于 2010-10-08T12:47:38.323 に答える
4

CVS には多くの設計上の欠陥があります。履歴を失うことなくディレクトリを削除できないことはその 1 つです。履歴を失わずにファイルとディレクトリの名前を変更するのが難しいことは別です。

Subversionへの移行を検討してください。 cvs2svnは、すべてのブランチとタグを含むリポジトリを非常にうまく変換します。CVS と SVN のコマンド セットは非常に似ており、最小限の調整しか必要ありません。(そして、これが「どのバージョン管理を使用すべきか」という戦争になるのを防ぐために)SVNを使用すると、 gitSVKなどのより高度なバージョン管理システムに移行できます。

于 2008-10-15T15:25:32.480 に答える
1

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

乾杯、

ロブ

于 2008-10-15T15:07:47.727 に答える