2008-10-15 7 views
34

CVS에서 빈 디렉토리를 제거 하시겠습니까?

어떻게 이런 일이 있었는지는 잘 모르겠지만 어떻게 든 완전히 비어있는 디렉토리 계층 구조가 내 저장소에서 끝났습니다.

com/ 
com/companyname/ 
com/companyname/blah/ 
com/sun/ 
com/sun/java/ 
com/sun/java/jax_rpc_ri/ 

이 디렉토리에 파일이 있지만 그 다음에 개발자는 빌드 프로세스의 부산물이기 때문에 처음부터 체크인하지 말아야한다는 것을 깨달았습니다. 따라서 파일을 제거했지만 빈 디렉터리는 고대 유적으로 저장소에 남아 있습니다.

이것을 CVS에서 어떻게 제거 할 수 있습니까? 내가 찾은 유일한 결과는 CVS가 처음부터 주위를 지키지 않아 cvs update-P 옵션을 제거해야하므로 빈 디렉토리를 제거 할 필요가 없다는 말이다. 그것들은 작업 디렉토리에서 가져온 것입니다. 저장소에 실제로 빈 디렉토리가 있으면 아무 도움이되지 않습니다.

cvs removecvs 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

AFAIK CVS 프로토콜은 디렉토리를 제거 할 수 없습니다. 서버 콘솔로 가서 실제 실제 저장소에서 제거해야합니다.


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

당신은 디렉토리 자체를 제거하지 마십시오; 그렇게 할 방법이 없습니다.

+4

경고! 일단 CVS가 디렉토리를 잃어 버리면 결코 다시 되돌릴 수 없으므로 실제, 물리적 저장소로 갈 필요가 있습니다. CVS는 지워진 파일을'Attic'이라는 특별한 폴더에 저장합니다. 'Attic'을 지우면 그 파일들은 영원히 사라집니다. –

+1

이런 일을하기 전에 항상 두 번 생각해보십시오. 문제는 없습니다.'ssh cvsserver :/cvsroot 'tar cvf com.tar com''; 'scp cvsserver : /cvsroot/com.tar .'; 'cvs add com.tar'; 'cvs ci com.tar'; 'cvs rm -f com.tar'; 'ssh cvsserver :/cvsroot 'rm -rf com.tar com'' – minopret

20

CVS 체크 아웃 및 업데이트는 항상 빈 디렉토리를 체크 아웃합니다. 그것은 CVS가 구축되는 방식입니다. "자두"- - "-P"로 업데이 트를 수행 빈 디렉토리를 제거 :

cvs update -dP 

이 (추가

는 "-d"마지막 업데이트 이후 나타난 새로운 디렉토리를 업데이트합니다 그렇지 않으면, CVS는 무시합니다)

+4

이것은 작업 카피에서 비어있는 디렉토리 만 제거합니다 - 저장소에서 그것들을 제거하고 싶습니다. –

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가 모든 것을 점검 (또는 모든 것을 점검) 한 다음 빈 dir을 제거하십시오.

HTH

환호,

+0

감사합니다. 이로 인해 직장에서 어떤 피해를 입은 피해를 취소 할 수있었습니다. – Tanktalus

4

CVS는 결코 역사를 잃고 하나없이 디렉토리를 제거 할 수있는 없습니다, 설계 결함을 가지고 있습니다. 기록을 잃지 않고 파일과 디렉토리의 이름을 바꾸는 것이 어렵습니다.

Subversion으로 졸업하는 것을 고려하십시오. cvs2svn는 모든 가지와 꼬리표를 포함하여 저장소를 개조하는 아주 좋은 일을한다. CVS 및 SVN 명령 세트는 매우 유사하며 최소한의 조정 만 필요합니다. SVN을 사용하면 일단 git 또는 SVK과 같은 더 많은 고급 버전 제어 시스템으로 이동할 수 있습니다.

7

그냥

  1. RM -rvf/localCopy/프로젝트/emptyDirectory
  2. 편집/localCopy/프로젝트/CVS/항목, 라인 D/emptyDirectory ////, 저장 파일
  3. RMDIR을 삭제

    했다 -v/CVSROOT/project/emptyDirectory

프로젝트에서 emptyDirectory를 제거합니다. 내부 CVS 데이터를 엉망으로 만들지는 않겠지 만, 효과가있는 것 같습니다 (CVS 버전 1.12.13).

4

이것은 나를 위해 일했습니다. 기본적으로 할 때

rmdir -v/CVSROOT/project/emptyDirectory # CVS 저장소 디렉토리에서 디렉토리를 삭제합니다.

저장소 Unix 서버 로그인 액세스가있는 경우, 경로로 이동하여 디렉토리를 삭제하거나 UNIX 팀과 동일한 우려를 제기 할 수 있습니다.

1

작업 영역에서 디렉토리를 삭제할 수 없으므로 저장소를 삭제해야 실제 저장소가 보관 된 서버로 이동해야합니다. 그러나 cvs remove 명령을 사용하여 디렉토리에서 파일을 삭제할 수 있습니다.

관련 문제