git diff & patch 적용
2021. 11. 30. 07:45ㆍEnv/Tools
- 목차
반응형
1. diff 생성
1) diff을 뜨기 위한 위치로 이동한다.
2) patch file을 생성한다.
~$ git diff > patch_file
or
~$ git diff --no-prefix > patch_file
- no-prefix option
- 출력된 차이 정보에 파일 경로의 접두사를 포함하지 않는 옵션입니다.
- 보통 src/main.c 와 같이 src라는 경로가 포함되나, 이 옵션을 사용하면 main.c만 보이게 됩니다.
- 보다 간결한 출력을 얻고자 하는 경우에 사용합니다.
- 하위 폴더
- 기본적으로 git diff > patch를 하게되면 하위 폴더들에 대해 모두 재귀적으로 차이를 생성합니다.
- 만일 특정 폴더에서만 수행하고 싶다면, git diff src/ > patch와 같이 diff을 얻고자 하는 폴더를 지정하여 git diff을 수행합니다.
2. patch 적용
1) patch를 적용할 위치로 이동한다.
~$ cd path
2) patch를 적용한다.
~$ patch -p1 < patch_file
or
~$ patch -p0 < patch_file
- -p1
- 파일 경로에서 경로 구성 요소를 제거하는데 사용하는 옵션입니다.
- git에서 생성한 patch file에는 보통 (no-prefix를 주지 않을 경우) 파일에 전체 경로가 포함되어 있습니다.
- 이 patch를 특정 경로부터 시작하는 하위 경로에 적용하고자 할때 -p1 옵션을 사용합니다.
- -p1은 경로 구성 요소 중 첫 번째 요소를 제거하는 것을 의미합니다.
- 즉, a/src/main.c의 경우 -p1을 주면, src/main.c와 같이 가장 앞의 a/를 제거하여 patch file을 적용합니다.
- 만약 a/src 둘 다 제거하고 적용하고자 한다면, -p2를 주면 되겠습니다.
- -p0은 파일 경로에 아무 변경을 주지 않고 처리하는 옵션입니다. 즉, patch 파일 내 경로를 그대로 적용해 파일을 찾고 patch를 적용합니다.
3. 적용 예
project
+- src
| +- main.c
| +- util.c
프로젝트가 위와 같이 구성된 경우 main.c의 내용을 수정합니다. 이제 diff을 수행합니다.
git diff > patch_file
--- a/src/main.c
+++ b/src/main.c
...
현재 directory의 위치가 이니라, 기준이 되는 것에 a/를 붙이고, 수정 부분에 b/를 붙입니다.
(그래서 patch 적용 시 -p1을 지정할 필요는 없습니다)
이제 patch_file을 적용할 때, project가 다른 위치에 있을 수 있습니다. (만약 위와 같이 a/, b/로 처리되지 않은 경우)
그래서 -p1 옵션을 사용해서 경로의 첫 번째 구성 요소를 제거하고 patch_file을 적용하면 편리합니다.
patch -p1 < patch_file
그러나 patch_file 내 경로의 시작이 a/, b/ 처럼 git이 임의로 지정한 위치로 구성된 경우라면, -p1을 지정하지 않아도 됩니다.
반응형
'Env > Tools' 카테고리의 다른 글
VirtualBox Ubuntu 메뉴가 안보일 때 (no menu) (0) | 2021.12.13 |
---|---|
Markdown grammar (0) | 2021.12.05 |
tmux 사용법 (0) | 2021.11.30 |
iTunes에 앱 별 파일 넣기 (0) | 2021.11.30 |
VirtualBox Ubuntu 메뉴가 안보일 때 (no menu) (0) | 2021.10.09 |