오픈소스 이야기
diff & patch
2022.10.03 15:36
오픈소스에 대한 이해를 만화로 쉽게 할 수 있도록 작성한 컨텐츠를 원작자 님의 허락을 얻고 공유하고 있습니다.
공유를 허락해주신 원작자님에게 감사 드립니다.
원작자 : https://joone.net/

“diff와 patch는 무슨 툴인가?”
잠깐 사용 방법을 소개하면,
hello_v1과 hello_v2 디렉토리에는 같은 hello.c라는 파일이 있지만, hello_v2에는 변경한 코드가 있습니다.
~/foss-comics-code/47.git/diff$ cat hello_v1/hello.c /* gcc hello.c -o hello */ #include <stdio.h> int main() { printf("Hello World"); return 0; } ~/foss-comics-code/47.git/diff$ cat hello_v2/hello.c /* gcc hello.c -o hello */ #include <stdio.h> int main() { printf("Hello World\n"); return 0; }
두 hello.c파일을 비교할 때, diff라는 툴을 사용합니다.
~/foss-comics-code/47.git/diff$ diff -u hello_v1 hello_v2 diff -u hello_v1/hello.c hello_v2/hello.c --- hello_v1/hello.c 2022-09-05 18:37:24.894542803 -0700 +++ hello_v2/hello.c 2022-09-05 18:38:58.740332080 -0700 @@ -4,7 +4,7 @@ int main() { - printf("Hello World"); + printf("Hello World\n"); return 0; }
위와 같이 두 파일을 차이를 쉽게 볼 수 있습니다. 자, 이제 이를 파일로 만들어서 hello.c를 만든 사람에 전달해봅시다.
~/foss-comics-code/47.git/diff$ diff -u hello_v1 hello_v2 > diff.patch ~/foss-comics-code/47.git/diff$ cat diff.patch diff -u hello_v1/hello.c hello_v2/hello.c --- hello_v1/hello.c 2022-09-05 17:25:53.992894733 -0700 +++ hello_v2/hello.c 2022-09-05 17:27:51.091147715 -0700 @@ -4,7 +4,7 @@ int main() { - printf("Hello World"); + printf("Hello World\n"); return 0; }
diff.patch라는 파일이 만들어졌습니다. 이제 이를 hello_v1/hello.c에 적용해봅니다.
~/foss-comics-code/47.git/diff$ patch -d hello_v1/ -p1 < diff.patch
이렇게 하면 hello_v1/hello.c와 hello_v2/hello.c이 같아야 합니다. 확인해보겠습니다.
~/foss-comics-code/47.git/diff$ diff -u hello_v1 hello_v2 ~/foss-comics-code/47.git/diff$
diff 명령어 결과가 없는 것으로 보아 두 파일이 같다는 것을 알 수 있습니다.
참고로, diff 명령어는 1970년대 초기에 벨랩에서 Unix 운영체제를 개발할 당시에 만들어진 툴입니다.
직접 diff와 patch 명령어를 사용해보세요!
https://github.com/joone/foss-comics-code/tree/main/47.git/diff
참고: diff와 patch 프로그램을 사용하는 방법 (https://kldp.org/node/28938)
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 오픈소스 이야기 게시판 이용안내 [3] | Kevin | 2018.04.13 | 1516 |
76 | LLVM 프로젝트 (2/2) [2] | Kevin | 2023.01.20 | 114 |
75 | LLVM 프로젝트 (1/2) | Kevin | 2023.01.20 | 77 |
74 | X-윈도우와 Wayland [4] | Kevin | 2022.11.03 | 1147 |
73 | GIT | Kevin | 2022.10.03 | 135 |
72 | quilt 사용하기 | Kevin | 2022.10.03 | 68 |
» | diff & patch | Kevin | 2022.10.03 | 45 |
70 | gpl-violations.org [1] | Kevin | 2022.09.02 | 154 |
69 | KHTML [1] | Kevin | 2022.08.03 | 148 |
68 | 8월 도커, 쿠버네티스, 록키 리눅스 실무 교육(Zoom) 100% 정부지원 | RedHat | 2022.07.29 | 432 |
67 | 파이어폭스 [1] | Kevin | 2022.06.30 | 235 |
66 | 넷스케이프 브라우저 [2] | Kevin | 2022.05.16 | 315 |
65 | 모자익 브라우저의 탄생 | Kevin | 2021.10.12 | 351 |
64 | 월드와이드웹(WWW)의 시작 4 [1] | Kevin | 2021.05.16 | 323 |
63 | 월드와이드웹(WWW)의 시작 3 [1] | Kevin | 2021.04.12 | 354 |
62 | GIMP FAQ 한국어 번역 [2] | 세벌 | 2021.04.07 | 369 |
61 | 월드와이드웹(WWW)의 시작 2 | Kevin | 2021.02.01 | 268 |
60 | 월드와이드웹(WWW)의 시작 1 [1] | Kevin | 2021.01.04 | 374 |
59 | 그놈(GNOME) 데스크탑의 시작 [2] | Kevin | 2020.08.06 | 922 |
58 | 오픈소스 이미지 편집 프로그램 김프와 GTK+ 시작 [2] | Kevin | 2020.06.08 | 1478 |
57 | 오픈소스 GUI 툴킷 Qt와 KDE 프로젝트의 시작 [1] | Kevin | 2020.05.21 | 3674 |