0. diff 명령을 이용한 patch 생성
git diff를 이용한 patch를 만드는 것을 알아보기 이전에 고전적으로 diff를 이용한 patch파일 생성
a) 패치파일 생성
diff [옵션] [원본파일] [수정파일] > 패치파일.patch
diff옵션
옵션 | description |
-u | 통일된 출력 포맷을 사용한다. 디렉토리를 비교할 때, 두 개의 디렉토리 중 두 번째 디렉토리에만 파일이 존재한다면, 첫 번째 디렉토리에는 사실 파일이 없지만 있는 것처럼 처리한다 |
-r | 두 디렉토리를 비교할 때, 모든 서브 디렉토리는 재귀적으로 비교한다. |
-N | 비교하는 디렉토리에 파일이 하나의 디렉토리에만 있다면, 모두 있는 것처럼 처리를 하지만 사실은 다른 한 디렉토리에는 파일이 없다. |
diff를 이용한 patch 생성 예시
다음과 같이 예제를 위해 코드 작성
수정한 파일과 비교하기 위해 hello.c_origin을 생성하고 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(현재 디렉토리를 의미)
패치 제거
패치 파일을 이용하여 반대로 패치를 제거할 수도 있다. (-R옵션 이용)
patch [옵션 -R] [패치를 적용할 파일] < 제거할 패치파일.patch
패치 제거가 적용되어 이전처럼 "Hello Linux"가 아닌 "Hello World" 인 것을 확인할 수 있다.
1. git diff를 활용한 patch
Git으로 관리하는 소스코드의 수정사항을 patch로 배포 및 적용할 수 있다.
git으로 소스를 관리할 때 소스가 변경하고 git status를 통해 변경사항을 조회하며
git diff를 통해 어떤사항이 변경되었는지 자세히 확인할 수 있다.
위와 같이 소스의 변경사항을 출력하는 것을 이용하여 다음과 같은 방식으로 패치파일을 생성한다.
$ git diff > test.patch // 차이점을 test.patch로 생성
test.patch를 확인해 보면
원본 파일과 수정된 파일의 사이의 변경사항이 patch 파일로 생성된다.
위의 patch 적용방법과 마찬가지로 다음과 같이 패치를 적용할 수 있다.
patch [옵션] [패치를 적용할 파일] < 패치파일.patch
'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 |