git에서 특정 파일만 추출하기
언제나 시작은 사소한 것에서 비롯된다. 이 코멘트를 보고 이전부터 한번 해봐야지 생각했던 것을 심신이 지친 지금 시도를 해보고야 말았다. 스킨 같은 거 만들고 나면 압축을 해야 하는데 리눅스에서는 tar 를 사용하면 간편하지만 zip 형식으로는 압축이 안돼서 혹시 git 로는 특정 파일, 디렉토리만 zip 으로 압축해서 추출하는 방법이 없을까 고심을 했다. git archive 명령어를 알게 됐기 때문에 방법을 찾아야만 했다. 그리고 역시 방법은 간단했다. 조금만 생각을 바꾸면 되는데.. 그게 귀찮아서 시도조차 해보지 않았다니.. ㅎㅎ
http://git-scm.com/docs/git-archive 의 내용을 보면 옵션으로 path 를 지정하면 특정 파일, 디렉토리만 압축이 가능하다. 아래와 같은 형식의 명령을 실행하면 된다.
$ git archive -o test.tar.gz HEAD ./head.php ./tail.php
근데 이 방법은 파일의 개수가 적다면 가장 쉬운 방법일 것이다. 만약 매번 똑같은 파일을 압축해서 추출하거나 파일, 디렉토리 등이 다수 일 때는 불편한 방법일 것이다. 그래서 조금 더 생각을 해봤다. 그리고 이전에 작성했던 git에서 변경된 파일만 추출하기 포스트에서 힌트를 얻었다. 바로 아래의 명령이다.
git archive -o test.zip HEAD $(git diff --name-only HEAD^)
내가 주목한 부분은 $(git diff –name-only HEAD^) 이다. git diff 출력이 아래와 같은 형식인 점에 착안했다.
adm/shop_admin/categoryform.php
adm/shop_admin/categoryformupdate.php
adm/shop_admin/categorylist.php
adm/shop_admin/categorylistupdate.php
adm/shop_admin/itemqaform.php
adm/shop_admin/itemqaformupdate.php
adm/shop_admin/itemqalist.php
adm/shop_admin/itemtypelist.php
adm/shop_admin/itemuseform.php
adm/shop_admin/itemuseformupdate.php
adm/shop_admin/itemuselist.php
adm/shop_admin/wishlist.php
bbs/db_table.optimize.php
bbs/register_form_update.php
bbs/scrap_popin.php
lib/shop.lib.php
plugin/kcpcert/lib/ct_cli_lib.php
shop/_common.php
shop/cartupdate.php
그렇다면 $(git diff –name-only HEAD^) 부분을 대체해서 위와 같은 형식으로 파일 리스트를 전달해주면 되겠구나 생각을 하고 filelist 라는 파일을 하나 생성한 후 이 파일에 아래와 같이 파일과 디렉토리를 기록했다. filelist 라는 이름은 생각나는대로 적은 것이다. 파일은 Enter 키로 구분해서 기록했다.
head.php
tail.php
shop/item.php
extend/
그런 다음에 filelist 에 기록된 내용을 git archive 명령 실행 때 전달해 주기 위해 cat 명령을 사용했다. 그래서 최종적으로 아래와 같이 실행해주니 filelist 에 기록된 파일과 디렉토리만 압축이 됐다. 성공이다. ㅎㅎ
$ git archive -o test.zip HEAD $(cat filelist)
이젠 스킨 파일 만들고 zip 으로 압축하기 위해 ftp 로 다운로드 하고 압축하는 삽질을 이젠 안해도 된다.
헐 대박 팁입니다. ^^b
지금 홈페이지 시스템 고치는 중인데, 완료되는 데로 바로 적용해봐야겠네요. 짱짱맨!!!
어제 물어본 것 보고 해본 건데.. 원하던 거였나 보네요.. ㅎㅎ
방금 테스트해봤는데… 초대박 울트라캡숑짱입니다. ㅠㅠ
사랑해요♥ㅎㅎㅎ
뭘 하시길래.. 이런 팁이 도움이 됐는지가 더 궁금하네요.. ㅎㅎ