CVS 수정된 파일 목록 뽑기
2012. 1. 30. 14:38ㆍ99. 정리전 - IT/29. IT 잡동지식
CVS에서 수정된 파일 목록만 얻기(changed file list 변경된 파일 목록)
현재 운영중인 시스템을 변경할 때 전체 파일을 다 실운영서버에 업데이트 하지 않고, 변경된 파일들만 업데이트를 하곤 한다(실제로는 전체 파일을 다 업데이트 해도 아무 문제가 없게 구성하는 것이 더 좋다고 생각한다 - 현재 약간 특수한 문제로 그럴 수 없다).
이럴때 버그 등을 수정하기 전 상황과 수정이 끝난 이후의 변경된 파일 목록을 뽑아내야 하는 경우가 있다.
CVS등의 버전 관리 시스템을 이용하면 당연히 쉽게 할 수 있는 일이다. 현재 CVS를 사용해서 이렇게 하는 방법을 찾아봤다. (사실 그냥 update하는거기 때문에 따지고 보면 정말 별거 아니다)
먼저 프로그램 수정 직전 시점의 상태로 임시 디렉토리에 체크아웃한다. 수정 직전에 태깅을 해뒀다면 더욱 좋고 안해뒀다 해도 날짜와 시간으로 지정가능하다.
set CVSROOT=:pserver:id@hostname/home/cvs/project
cvs login
# 변경이 일어나기 이전 시점의 날짜와 시간 지정
cvs co -D "YYYY/MM/DD HH:MM" myproject
# 태깅을 해뒀을 경우에는
cvs co -r TAGNAME myproject
cvs login
# 변경이 일어나기 이전 시점의 날짜와 시간 지정
cvs co -D "YYYY/MM/DD HH:MM" myproject
# 태깅을 해뒀을 경우에는
cvs co -r TAGNAME myproject
날짜와 시간 지정시에는 "2006/05/05" 혹은 "2006/05/05 09:00" 뭐 이런식으로 가능하다.
모두 CheckOut 한 뒤에는,
cd myproject
cvs update -r HEAD -dP > ..updatelist.txt 2>&1
cvs update -r HEAD -dP > ..updatelist.txt 2>&1
이와 같이 하면 체크아웃해둔 시점 이후의 변경사항들을 모두 내려받아 업데이트하고 그 변경 목록을 ..updatelist.txt로 저장하게 된다. (2>&1의 경우 Unix/Linux는 상관없지만 Windows의 경우에는 Windows XP 이상에서만 작동한다고 한다)
cd myproject
cvs -n update -r HEAD -dP > ..updatelist.txt 2>&1
cvs -n update -r HEAD -dP > ..updatelist.txt 2>&1
처럼 -n 옵션을 붙이면 실제 업데이트를 안하고 업데이트 내용만 출력하는데, 이 경우 디렉토리의 생성/삭제가 있었을 때의 상황이 단순히 ignored 로 출력돼 버려서 조금 헷갈린다. 아예 update를 수행해버리는게 더 정확한 것 같다.
출처 : http://kwon37xi.egloos.com/2576888