git에서 변경된 파일만 추출하기
업무상 버전관리를 git를 이용해 하고 있다. 처음 git을 접했을 때만 해도 버전관리라는 개념자체가 없었기 때문에 굉장히 낯설었는데 지금은 이걸 가지고 여러가지를 하고 있다. 다른 레파지토리의 내용을 가져오거나 하는 등의 작업 말이다. 그리고 어제 배포 중인 솔루션의 패치 버전을 만들면서 수정된 파일만 추출할 수 있으면 좋겠다는 생각을 하게 됐고 되지도 않는 영어를 이용해 구글에서 검색을 해보니 정말 운 좋겠도 방법을 찾을 수가 있었다. 이 방법때문에 패치 배포할 때 좀 더 수월해졌고 사용자도 반응이 좋다. ㅎㅎ
참고한 포스트는 http://tosbourn.com/using-git-to-create-an-archive-of-changed-files/ 으로 git archive 와 git diff 코맨드를 이용해서 변경된 파일만 추출 후 압축 파일로 만들어 준다. 아래 두 가지 상황을 예로 들어 설명해보자.
1. 바로 이전 commit과 현재 최신 파일을 기준으로 변경된 파일 추출하기
이것은 참고 포스트에 있는 내용이다. git 에서 HEAD는 가장 최신 상태를 지칭한다. 아래처럼 HEAD 이전 commit 이후 변경된 파일을 추출할 수 있다.
git archive -o test.zip HEAD $(git diff --name-only HEAD^)
HEAD^는 HEAD 바로 이전 commit을 가르킨다. 위 코맨드를 실행하면 변경된 파일만 test.zip 파일로 압축된다. git archive 관련 내용은 http://git-scm.com/docs/git-archive 를 참고하면 된다.
2. 특정 버전(tag)간 변경된 파일 추출하기
tag를 이용해 버전을 관리하는 경우 이 tag를 이용해서 특정 버전 간의 변경된 파일 추출이 가능하다. 아래의 명령어를 실행하면 5.0.20 버전과 5.0.21 버전의 사이의 변경된 파일만 추출이 가능하다.
git archive -o archive.zip HEAD $(git diff --name-only 5.0.20..5.0.21)
git diff 관련 내용은 http://git-scm.com/docs/git-diff 를 참고하면 된다.
이 내용을 몰랐을 때는 항상 전체 파일을 압축해서 패치 버전을 배포했는데 위 내용을 변경된 파일만 추출할 수 있어 관리 면에서 많은 도움이 된다. git을 사용해보면 그 편의성에 감탄을 하게 된다. git 관련 내용은 계속해서 검색을 해보고 사용법을 익혀나가야겠다. 알면 알수록 더 편해질 수 있으니 말이다.
수정된 파일만 다운로드 받는 기능이 이 즈음에 추가되었겠네요. 🙂
검색하면서 머리를 쥐어짜내는 중이긴 한데 미리 지정된 파일만 추출하는 방법은 없을까요?
head.php
tail.php
를 지정해 놓으면 명령어 입력하면 저것만 탁! 추출되게…
잘 읽고 갑니다.
http://git-scm.com/docs/git-archive 여기 내용을 보면
path 를 지정하면 특정 파일만 추출이 가능한 것 같네요.
git archive -o test.tar.gz HEAD ./head.php ./tail.php
이런 식으로 하는 듯 합니다.