공지

2006년 8월 30일 수요일

[펌] patch

많은 개발자들은 자신들이 개발하는 프로그램 소스의 버전을 유지하기 위해, 원소스 외에 패치파일을 준비한다. 일반적으로 패치파일은 diff를 사용해서 작성하고, 해당 패치파일을 적용할 때는 patch 명령어를 사용해 패치적용을 완료한다.
필자는 처음에 커널 공부를 할 때, 패치파일 사용으로 어려움을 겪은적이 있다. 실제 버전업된 커널 소스 파일 전체를 받는게 나은지, 아님, 하나의 커널 소스 파일을 斌? 패치 파일만 받는게 낳은지 잠시나마 고민했던 적도 있다.
따라서, diff 와 patch 파일은 커널에만 관련있는 내용은 아니나, 커널 패치와 유용히 사용될 수 있는 명령어이므로, 아래에서 살펴보고자 합니다.
기본 개념 및 사용법은 아래의 설명을 따라하기 식으로 해보면, 이해할 수 있을겁니다.


Diff 사용법

1. 두개의 빈 파일을 생성합니다.
[css@css ~]$ touch aaa bbb
[css@css ~]$ ls
aaa bbb


2. aaa에 아래의 라인을 추가합니다. (vi 사용법은 애플리케이션 소개란을 참고하세요. ^^) [css@css ~]$ vi aaa

This is first line // 라인을 추가합니다.


3. aaa 를 bbb로 복사하고, 새로운 라인을 추가합니다. [css@css ~]$ cp aaa bbb
[css@css ~]$ vi bbb
This is a first line
This is a second line // 라인 추가


4. aaa와 bbb의 변경 부분을 패치파일로 만듭니다. 그리고, 변경되는 부분이 패치파일에 어떻게 저장되나 확인합니다.
[css@css ~]$ diff -urN aaa bbb > mydiff.patch
[css@css ~]# cat mydiff.patch
--- aaa 2005-03-07 20:23:22.566188880 +0900
+++ bbb 2005-03-07 20:23:32.986604736 +0900
@@ -1 +1,2 @@
this is a first line
+this is a second line


5. bbb를 지우고, 패치파일의 내용을 aaa에 적용시킵니다. [css@css ~]$ rm -f bbb
[css@css ~]$ patch -p 0 < mydiff.patch
patching file aaa


6. aaa에 패치파일의 내용이 적용되었나 확인합니다.
[css@css ~]$ cat aaa
this is a first line
this is a second line // 라인이 추가되었음


댓글 없음:

댓글 쓰기