....

SVN 에서 특정 리비젼 파일만 추출하기.. 본문

Linux

SVN 에서 특정 리비젼 파일만 추출하기..

idkook 2009. 6. 9. 16:27
TortoiseSVN을 쓰면 아주 간단하다...
특정 리비젼의 diff를 선택하고 그 파일 목록에서 우클릭하고 export를 눌러버리면 된다.

BUT~!!!!

SVN입문용으로는 참 추천할만 하지만...
솔직히 많이 무겁다... 탐색기 베이스에서 사용할 수 있는 점은 정말 맘에 들긴 하지만..
이녀석을 깔고 안깔고 시스템의 속도 차이가 확 나는걸 느껴버린 마당에 다시 깔기는 싫다..

그냥 이클립스에서 직접 해도 되고.. 커맨드 쉘을 써도 충분히 원하는 기능을 다 사용할 수 있다..
다만 특정 리비젼 추출만은 안되더라.....

어디까지나 원격지 운영에 반영을 빠르게 하기 위한 목적이기 때문에 특정 리비젼에서 바뀐 파일을 디랙토리 구조까지 뽑아낼 수 있느냐 없느냐는 어찌보면 상당히 중요한 문제다...
(물론 diff patch도 있지만...  비전산 담당자에게 이 파일 던져주고 반영해달라고 하기엔 절대 무리인 것이다...)

대충 리눅스 쉘을 이용해서 -diff를 이용해서 뽑아낸 변경 파일 목록을 awk를 이용해서 파싱해서 cp --parents로 복사해서 압축하는 스크립트를 만들어야 겠다... 라고 생각하고..

구글링에 위 명령어 단어들을 대충 딱 때려봤는데...

역시~ 이런건 이미 누군가 고민한 내용이다...

subversion 작업 도중 변경된 파일만 추출해낼 수 있나요?

결론 : svn diff -r50:60 --summarize | awk '{print $NF}' | xargs -i cp {} (대상경로) --parents

직접 만드는것도 좋지만.. 이런건 이해만 할 수 있다면 그냥 긁어다 쓰는거닷~!
물론 원작자한테 고마운 마음을 한껏 느끼면서....
예전에 서버 관리를 할때는 정말 살다시피한 사이트였는데 여기서 다시 보게 될줄은...

이걸 스크립트로 만들고 자주 바뀌는 부분을 argument로 대치해서 쉘스크립트 하나 만드는건 금방이다.. ㅎㅎ



이 글 쓰고나서 끄적끄적 만든 초간단 쉘 스크립트...

본래 뼈대 만드는데는 5분도 안걸렸는데... 마지막에 zip으로 들어온거 체킹한다고 awk 정규식 만들다가 ㅎㄷㄷ..
(정규식 관련 명령은 가끔 쓰게 되면서도 쓸때마다 관련 자료를 찾아 해매게 된다..)

#!/bin/sh

if [ $# != 2 ]; then
    echo 'usage : svnexport.sh [revision] [exportZip.zip]'
    echo '[revision] : -r50:60 (see also svn help diff -r option)'
    echo '[exportZip] : export zip file name with path'
    exit 1
fi

REVISION=$1
EXPORT_ZIP=$2
EXPORT_DIR=`echo $2 | sed 's/.zip//gI'`
CHECK_ZIPFORMAT=`echo $EXPORT_ZIP | awk 'BEGIN {IGNORECASE = "true"; FS = "."} {print tolower($NF)}'`

if [ $CHECK_ZIPFORMAT != "zip" ]; then
    echo 'Error : [exportZip] need .zip extention'
    exit 1
fi

exit 1  디버깅용 코드가 남았다..... 삭제..

if [ -f $EXPORT_ZIP ]; then
    rm -rf $EXPORT_ZIP
fi
if [ -d $EXPORT_DIR ]; then
    rm -rf $EXPORT_DIR
fi

mkdir $EXPORT_DIR
if [ ! -d $EXPORT_DIR ]; then
    echo 'Error : Not found or can not make template export directory...'
    exit 1
fi

svn diff $REVISION --summarize | awk '{print $NF}' | xargs -i cp {} $EXPORT_DIR --parents --verbose
zip -r -v $EXPORT_ZIP $EXPORT_DIR && rm -rf $EXPORT_DIR


실행예)
svn checkout 이 되어 있는 경로에서..
> svnexport.sh -r50:60 ~/export/revision50-60.zip
이렇게 하면 50~60리비젼에 변경된 파일이 해당 경로의 zip으로 압축된다..

맨 맽에 빨간 글씨를 다 빼버리면 실행뒤에 아무런 멧세지도 볼 수 없으니까 복사할때.. 압축할때.. 취향껏 넣어 쓰면 될듯...

난.. mavric ant를 이용해서... 작업 PC에서 커밋할때마다 이 쉘을 한번 실행만 시키면 될 뿐이고~~
만들어진 zip파일만 담당자한테 서버에 풀어주세요~~ 하고 패스하면 될 뿐이고~~
긋~
Comments