CVS를 조금 사용해 보았지만 모든 기능에 익숙하지는 않지만 더 많은 디렉터리를 포함하는 새 디렉터리를 추가하는 것이 가장 성가신 일입니다. 'cvs add'를 실행하면 현재 디렉토리의 내용만 추가되고, 'cvs import'를 사용하는 것도 여전히 내가 생성하는 코드이기 때문에 옳은 것 같지 않았습니다(이 하우투는 타사 소스를 위한 가져오기라고 주장합니다).
주어진 디렉토리의 모든 것을 재귀 적으로 현재 CVS 프로젝트에 추가하는 방법을 알고 있습니까 (또는 SVN 또는 git이이 작업을 현저히 쉽게 만드는 경우)?
내가 찾은 이 협력했습니다 아주 효과적으로:
첫째, 모든 것은 아닌 release. " CVS" 디렉터리용 추가,,:
find . -type d \! -name CVS -exec cvs add '{}' \;
어떤 제외한 모든 파일을 추가하고, cvs 디렉터리입니다.
find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs add '{}' \; \)
이제, 누구나 사용할 경우 치료제를 당황 CVS 는 이날 및 나이.
내가 이:
먼저 모든 디렉터리용 재귀적으로 추가 적은 CVS 수준들과: ,, $ > code> < pre> <. 찾기. - 유형 속도입니다.4! - 이름 추가 & # 39, & # 39, CVS - exec cvs {} \ < /code> < /pre>;;;;
두 번째 추가 덜 CVS 서버는 수준들과 모든 파일, 디렉터리: < pre> <, 코드 $ >;; 찾기. \ (- 유형 속도입니다.4 - 이름 CVS - 정리) - o (- {} & # 39, & # 39, 타입 f - exec cvs 추가 . ) < /code> < /pre>;;;
첫 3 할, 재귀적으로 "커밋합니다" 같은 " version". 설명: < pre> <, 코드 $ >;; 찾기. \ (- 유형 속도입니다.4 - 이름 CVS - 정리) - o (- - m 타입 f - exec cvs, 최초의 " 커밋합니다 version". {} & # 39, & # 39. . ) < /code> < /pre>;;;
마지막 태깅에 모든 재귀: < pre> <, 코드 $ >;; 찾기. \ (- 유형 속도입니다.4 - 이름 CVS - 정리) - o (- 타입 f - {} & # 39, & # 39 - F MY_CVS_TAG exec cvs 태그. . ) < /code> < /pre>;;;
이 답을 Mark 가 유용 (찾기. xargs - 0 - type f - print0 cvs 추가) 근데 일부 문제 해결 등 자신의 파일을 추가할 때 발생한 cvs 추가 시도하시겠습니까 태그번호, 항목 e.
가장 높은 수준의 폴더에서는 NEW_FOLDER 불렀으매 추가 < pre>, cvs 추가 NEW_FOLDER< /pre>;;
이전 명령을 사용할 수 있는 모든 하위 진단트리는 추가 일부 제외
>. groupx NEW_FOLDER/ - 유형 속도입니다.4! - 이름 " CVS"; - 및! - 이름 " Tag"; - 및! - 이름 " Entries.Log"; - 및! - 이름 " Entries"; - 및! - 이름 " Repository"; - 및! - 이름 " Root"; xargs print0 cvs 추가 - 0 -
>. 타입 f - groupx NEW_FOLDER/! - 이름 " CVS"; - 및! - 이름 " Tag"; - 및! - 이름 " Entries.Log"; - 및! - 이름 " Entries"; - 및! - 이름 " Repository"; - 및! - 이름 " Root"; xargs print0 cvs 추가 - 0 -
단, 파일 및 폴더 안에 있는 cvs 추가 '를 사용할 수 있습니다.' 하고, 그렇지 않으면 이미 체크아웃된 복제본에 내려받습니다 [", CVS / 엔트리입니다 reading" 위한 열 수 없습니다.] [1] 메시지. 새로 만드는 ", 루트 module" 위한 기술이다. cvs 는 추가 '를 사용하여 설명된' 이 윈스프스 FAQ 항목: [http://cvsgui.sourceforge.net/newfaq.htm # add_rootmodule] [2]
Windows 의 경우, 재귀 아니라 여러 개의 파일을 모두 토르투아크프스 및 윈스프스 지원부에서는 (및 옵션 커밋합니다) 단일 작업입니다. 윈스프스 에서 매크로의 포착하십시오 Add>, 재귀 추가 (자동 커밋합니다). 추가 콘텐츠 명령을 사용하여 디렉터리입니다 있는 건축물이다. 그리고 어떤 키워드를 추가 확장 모드를 선택할 수 있는 파일을 모두 사용할 수 있는 그들 (주로 사용될 수 있는 이진 파일은 정의점에).
여기에 대한 자세한 정보 재귀 윈스프스 살펴 보십시오. [http://cvsgui.sourceforge.net/newfaq.htm # cvs-add_recursive] [3]
그 외에 '에서' cvs 가져오기의 질량입니다 추가 적합합니다. 그러나 '바닐라 CVS 는 2 단점' cvs 가져오기의 운행에서어떠한 구현되어 있으며 ( 는 당초 때문에 쓰는 타사 코드):
it 는 필수 분기로의 with special 시맨틱스를.
않니다 작성하지 리포지토리를 메타데이터 (즉, 숨겨짐 CVS 디렉터리용) 구축에 필요한 가져오기된 코드 비호환성의 체크아웃된 apc® 복제본에 위해 가져온 파일에 작동합니까 즉, 실제로 이 리포지토리를 체크아웃합니다 먼저 한다.
물론 모두 사용하는 경우 'nc 가져오기에서' 옵션을 지정하여 코프스백 피할 수 있습니다. ',' -n 캐비닛용입니다 vendor" " 없습니다. 지사 및 '-C' CVS 디렉터리용 만드는 데 있다.
[1]: http://cvsgui.sourceforge.net/newfaq.htm # cvs-add_nodir [2]: http://cvsgui.sourceforge.net/newfaq.htm # add_rootmodule [3]: http://cvsgui.sourceforge.net/newfaq.htm # cvs-add_recursive
이 같은 code> /code>;; /usr/bin/cvsadd< < 저장하기만 하면 됩니다 할 수도 있다. chmod +x code> < 빼놓을 수 없다,, # 39 와 don& /code> /usr/bin/cvsadd<;).
< pre>;
만약 [- z $1" "; ]; 그럼 에코 " 사용. # 39, & # 39 사비사데 message& 임포트합니다 "; 종료하십시오 1 fi
만약 [- $2" 속도입니다.4 "; ]; 그럼 cvs 추가 " $2"; $ cd " 2"; 종료하십시오 1 fi
만약 [! d CVS]; 그럼 에코 " cvs / directory", 현재의 디렉터리입니다 포함해야 합니다. 종료하십시오 1 fi
XARGS = - 0 - r - t 뻦 1" xargs ";
찾기. - 1 - $ xargs cvs 추가 print0 맥스데프트 타입 f - 찾기. 타입 f - - - - m $ $ xargs cvs " print0 맥스데프트 1 ci 1";
찾기. - - - - 이름 없는 CVS - a - d - 이름 없는 맥스데프트 유형 1. - $ $0" print0 xargs "; $1" "; < /pre>;
이미 설명한 것 같은 작업을 수행할 경우 다시 반복 조회를 할 방법이 실패할 경우 subtree 있을경우에 진단트리는 추가할 수) 이러한 이유로 해당 디렉터리용 아직 확인해야 합니다 아직 추가되든지 파일만 추가한 다음 주는 것은 아니라고 덧붙였다. 우리가 사용하는 출력을 할 수 있는 요소를 추가한 것으로 볼 수 있다 '' cvs 백업하도록 않았다 - 아직 시작 시 할말이다 물음표 (?)
우리가 사용하는 ',' 옵션 '0 print0' 와 'zz' 우리가 올바르게 처리할 수 있도록 파일 이름에 공백을. 또한 '아니 실행하십시오 비어 있는 경우 피하기 위해 사용하는 것이 아무 것도 없으면 추가되도록 실행하십시오' 합니다.
CVS_PATTERN=/tmp/cvs_pattern
cvs -z3 -q up | egrep '^\?.*' | sed -e 's/^? //' > $CVS_PATTERN
find . -type d \! -name CVS -print0 | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
find . \( -type d -name CVS -prune \) -o \( -type f -print0 \) | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
cvs commit -m 'commiting tree recursively'
이 방법을 통해 우리는 그러한 오류를 방지하는 것입니다.
cvs add: cannot add special file `.'; skipping
cvs [add aborted]: there is a version in ./dirname1 already
및
cvs add: `./dirname2/filename' already exists, with version number 1.1.1.1
[Mark& # 39 의 솔루션이므로] (https://stackoverflow.com/a/5262/1287812) 공간이 보정됩니다 문제이지만 이 문제를 만들어 냅니다.
>. cvs 추가: cvs / 항목을 열 수 없습니다. >. 판독값: No such file or 디렉터리입니다 < br />; cvs >. [추가 중단된]: 아니 리포지토리를
이를 해결하기 위해 실제 명령을 사용할 수 있다.
find . -type f -exec cvs add {} \;
하지만 SVN을 사용하면 이 사소한 작업을 훨씬 쉽게 수행할 수 있으며, Tortoise와 같은 GUI를 사용하면 훨씬 더 쉽습니다.
시작하기에 좋은 곳입니다: http://www-mrsrl.stanford.edu/~brian/cvstutorial/