본문 바로가기
Linux System/Linux

Patch file 만들기(git diff 활용)

by rewyear 2020. 3. 4.

0. diff 명령을 이용한 patch 생성

git diff를 이용한 patch를 만드는 것을 알아보기 이전에 고전적으로 diff를 이용한 patch파일 생성 

 

a) 패치파일 생성

diff [옵션] [원본파일] [수정파일] > 패치파일.patch

diff옵션

옵션 description
-u 통일된 출력 포맷을 사용한다. 디렉토리를 비교할 때, 두 개의 디렉토리 중 두 번째 디렉토리에만 파일이 존재한다면, 첫 번째 디렉토리에는 사실 파일이 없지만 있는 것처럼 처리한다
-r 두 디렉토리를 비교할 때, 모든 서브 디렉토리는 재귀적으로 비교한다.
-N 비교하는 디렉토리에 파일이 하나의 디렉토리에만 있다면, 모두 있는 것처럼 처리를 하지만 사실은 다른 한 디렉토리에는 파일이 없다.

 

diff를 이용한 patch 생성 예시

다음과 같이 예제를 위해 코드 작성

hello.c

수정한 파일과 비교하기 위해 hello.c_origin을 생성하고 hello.c를 수정

변경된 hello.c 내용

diff -urN hello.c hello.c_origin > test.patch 명령을 통해 변경된 사항을 patch로 생성

 

b) 패치 적용하기 / 제거하기

 

패치 적용

patch [옵션] [패치를 적용할 파일] < 패치파일.patch

패치의 옵션으로 -p[N]을 주로 사용하는데,

이는 패치 파일에서 몇개(N)의 경로를 제외하고 패치를 적용할지 결정하는 명령어.

 

예를 들어 a/src/hello.c에 -p1의 옵션을 줄 경우 src/hello.c에 패치가 적용, -p0의 경우 hello.c(현재 디렉토리를 의미)

hello.c_origin에 patch 적용

패치 제거

패치 파일을 이용하여 반대로 패치를 제거할 수도 있다. (-R옵션 이용)

patch [옵션 -R] [패치를 적용할 파일] < 제거할 패치파일.patch

패치가 제거된 hello.c_origin

패치 제거가 적용되어 이전처럼 "Hello Linux"가 아닌 "Hello World" 인 것을 확인할 수 있다.

 

1. git diff를 활용한 patch

Git으로 관리하는 소스코드의 수정사항을 patch로 배포 및 적용할 수 있다.

git으로 소스를 관리할 때 소스가 변경하고 git status를 통해 변경사항을 조회하며

git diff를 통해 어떤사항이 변경되었는지 자세히 확인할 수 있다.

 

 

위와 같이 소스의 변경사항을 출력하는 것을 이용하여 다음과 같은 방식으로 패치파일을 생성한다.

$ git diff > test.patch // 차이점을 test.patch로 생성

 

test.patch를 확인해 보면

생성된 test.patch 파일

원본 파일과 수정된 파일의 사이의 변경사항이 patch 파일로 생성된다.

 

위의 patch 적용방법과 마찬가지로 다음과 같이 패치를 적용할 수 있다.

patch [옵션] [패치를 적용할 파일] < 패치파일.patch

 

300x250

'Linux System > Linux' 카테고리의 다른 글

[func] mmap() / munmap() - memory 맵핑  (0) 2021.07.23
[cmd] install 명령어  (0) 2020.08.05
[func] poll  (0) 2020.04.07
[func] fcntl  (0) 2020.04.07
[cmd] md5sum  (0) 2020.03.04