본문 바로가기

Linux

git diff 보다 편리하게 git change 보기

출처 : http://blog.daum.net/bluebread/15



안드로이드에서 git을 사용하는데 적응이 안되는 부분이 변경사항을 보는 것입니다.

(물론 gerrit을 사용하는 환경이라면 또다른 이야기입니다.)


araxis merge 나 beyond compare 와 같은 디렉토리 비교툴에 익숙하시다면, git diff의 결과물이 낮설겁니다.


git diff 의 표시형식은 다음과 같이 - + 로 추가 삭제된 내용을 표시합니다.


이런 diff 형식이 낮선 분들은 git difftool을 사용하여 다음과 같은 좌우로 비교창을 열어 볼 수도 있습니다. (vimdiff를 사용한 예)



위에서는 vimdiff를 사용하였지만, git difftool은 실행할 파일을 지정할 수가 있습니다.

이 기능을 이용하여 (git difftool의 help를 보십시오.) diffzip.sh 라는 스크립트를 만들었습니다.

변경 이전과 이후의 바뀐 파일들만을 diff_old/diff_new 디렉토리로 정리해 zip을 해주는 유틸리티입니다.


일단 소스를 보시면 다음과 같습니다.

diffzip.sh

#!/bin/bash
if [ -f diff.zip ]
then
    rm diff.zip
fi
git difftool -y -x '~/oldnew.sh' $@
zip -r diff.zip diff_new diff_old
rm -rf diff_new
rm -rf diff_old

oldnew.sh

#!/bin/bash

function bury_copy()
{
    mkdir -p `dirname $2` && cp "$1" "$2";
}

$(bury_copy $1 diff_old/$BASE)
$(bury_copy $2 diff_new/$BASE)


diffzip.sh 의 사용법은 다음과 같습니다.

0. 전제조건

   - git version이 1.7.4 이상이라야 합니다. (git difftool이 $BASE 변수를 제대로 설정하여야 하기 때문에 필요합니다.)

   - zip 이 설치되어 있어야 합니다. 저는 다음 버전을 사용했습니다. Zip 3.0 (July 5th 2008), by Info-ZIP.


1. diffzip.sh 와 oldnew.sh를 ~/ 디렉토리에 만듭니다.

2. 두 스크립트를 실행가능하게 만듭니다.
   chmod +x diffzip.sh
   chmod +x oldnew.sh

3. git 디렉토리에서 ~/diffzip.sh 를 실행하면 diff.zip 파일이 생깁니다.

실행화면은 다음과 같습니다.


   이 zip 파일에는 diff_old/ 와 diff_new/ 라는 디렉토리가 들어있고 변경파일들만 포함되어 있습니다


4. 이 diff.zip 파일을 풀어보면 다음과 같이 변경사항들이 들어있게 됩니다.


내가 변경한 내용을 다른 사람에게 보여줄 때 매우 유용합니다.

즉. 코드 리뷰시에 쓸모가 있지요.