상세 컨텐츠

본문 제목

patch 파일 만드는 방법 diff와 git 에서 binary file patch 만드는 방법 그리고 patch 적용하는 방법

IT : GIT

by 인포개더러 2015. 2. 25. 01:37

본문


patch 파일 만드는 방법 diff와 git 에서 binary file patch 만드는 방법 그리고 patch 적용하는 방법


개발자라면 두개 파일의 차이점을 비교해서 그 차이점을 쉽게 전달할 수 있도록 해주는 patch 파일을 한번은 사용해 보았을 것 입니다. 같은 SCM server 를 사용할 수 있는 환경이라면 patch 파일을 따로 만들지 않더라도 쉽게 차이를 적용할 수 있는 방법이 있겠지만 그렇지 못한 경우라면 patch 파일을 만들어 전달해 주어야 합니다.



패치를 전달해 주는 방법에도 patch 를 만드는 방법에 따라 여러가지가 있습니다.

git 사용 중 가장 많이 사용하는 방법은 git format-patch 명령을 이용해서 patch file을 만들고 git am 명령으로 patch를 적용하는 방법이 있고 diff 명령으로 patch set을 만들고 patch 명령으로 패치를 적용하는 방법이 있습니다.


일반적으로 소스의 원본과 수정본 각 한벌의 소스를 가지고 있다면 diff 명령으로 쉽게 그 차이점을 파일로 만들 수 있습니다.


$ diff -uNr aDir bDir > dirDiff.patch


이 명령은 aDIR 에서 bDir 로 소스가 변경된 차이점을 dirDiff.patch 파일로 저장하라는 명령입니다.

여기서 uNr 이라는 옵션은


u : 소스의 변화가 없는 부분을 몇줄 추가로 출력할 것인가를 정하는 옵션입니다. u 만을 쓸 경우 3줄의 소스를 추가로 출력합니다.

N : 파일이 없는 경우 빈 파일로 처리한다는 옵션입니다.

r : 하위 폴더까지 포함해서 diff 를 만든다는 옵션입니다.


이렇게 생성된 파일은 patch 명령으로 적용이 가능합니다.


dirDiff.patch 파일을 받았다면 적용할 소스의 폴더로 이동하여


$ patch -p1 < dirDiff.patch


명령을 사용하면 됩니다.

-p1 옵션은 diff 를 만들 때 폴더를 기준으로 만들었으므로 diff 파일내에 aDir, bDir 이라는 폴더의 정보가 있으므로 이를 무시하고 patch를 적용하도록 하는 옵션입니다.



많이 사용하는 SCM tool 인 git 을 사용한다면 이 패치를 좀 더 쉽게 만들 수 있습니다.


두개의 commit 사이의 차이점을 patch 파일로 만드는 방법은


$ git diff aizkjflakj..ianoikaj > commitDiff.patch


의 형식으로 만들 수 있습니다. 이 명령은 shell command diff 와는 다르게 하위폴더까지 기본적으로 비교하여 patch 파일을 만들어줍니다.


이렇게 만들어진 patch 파일은 위의 경우와 동일한 방법으로 적용할 수 있습니다.


$ patch -p1 < commitDiff.patch


binary 파일의 경우 git diff 명령만으로는 그 차이점을 파일로 만들 수 없습니다. 이때 사용하는 옵션은 --binary


$ git diff --binary aizkjflakj..ianoikaj > commitDiff.patch


입니다.

이를 적용하는 방법은


$ git apply commitDiff.patch


입니다.


git 을 사용하면 git format-patch 의 형식으로 보다 많은 정보를 포함한 다양한 방법으로 patch 를 만들 수도 있습니다.


$ git format-patch ac234ed..gade92c

$ git format-patch -5


이렇게 명령을 실행하면 


0001-Fix_unstable_codes.patch

0002-Update_comments.patch

0003-Remove_useless_codes.patch

......


형식으로 patch 파일들이 생성됩니다.

이 파일들을 적용할 때는 한개씩 적용하여도 되고


$ git am 0001-Fix_unstable_codes.patch 


여러개를 한번에 적용해도 됩니다.


$ git am 000*


이상 patch 파일 만드는 방법 diff와 git 에서 binary file patch 만드는 방법과 적용하는 방법에 대한 글 이였습니다.


관련글 더보기