정보공간_1

[4기 광주 박주연] Diff, Patch를 사용한 변경사항 처리 본문

IT 놀이터/Elite Member Tech & Talk

[4기 광주 박주연] Diff, Patch를 사용한 변경사항 처리

알 수 없는 사용자 2013. 11. 5. 09:54

Diff, Patch를 사용한 변경사항 처리


이번 글에서는 Diff와 Patch를 사용해서 변경사항과 같은 이슈를 쉽게 처리하는 방법을 설명하려고 합니다.

기존에 소스 형상 관리를 사용하고 있을 경우 유사한 형태의 기능을 제공하지만 이와는 별개로 소스관리를 하지 않는 내용에 대해서 변경사항을 만들어 배포하거나 할 경우 유용하게 사용할 수 있습니다. 예를 들면 특정 작업 부분에 대해서 차후 변경된 내용에 대해 알려주고 변경 내용적용은 patch를 활용해 처리할 수 있습니다. 또 다른 예로 커널 소스의 특정 부분을 고쳤는데 팀원간에 고친 부분에 대한 내용을 공유하되 실제 고치는 작업은 간단히 patch 작업을 통해 끝낼 수 있도록 하면 작업이 매우 간단해 집니다.

Diff와 patch를 사용한 작업 과정은 다음과 같습니다.

  1. 원본 대상의 복사본 생성
  2. 복사본에 대한 수정
  3. Diff를 사용해 수정본에 대한 원본의 patch 생성
  4. Patch 파일 배포
  5. Patch 적용

이제 위 과정을 밟아 보면서 전체 작업에 대한 내용을 설명하겠습니다.

먼저 원본 대상의 복사본을 생성합니다. 예제에서는 미리 작성된 간단한 구구단 프로그램의 patch를 만들어 배포하는 과정을 설명하도록 하겠습니다.
리눅스 환경에는 두 가지 도구가 모두 기본으로 설치되어 있습니다.

1. 원본 대상의 복사본 생성

그림1. 복사본 생성

그림 1. 복사본 생성

2. 복사본에 대한 수정

  8 라인의 출력 텍스트와 12라인의 구구단 출력 텍스트를 수정하였습니다.

그림 2. 대상 파일의 수정

지금은 간단히 파일 하나를 수정하는 예를 보였습니다. 하지만 달리 생각해 볼 때 수백라인 이상의 텍스트 문서 파일에서 혹은 수 천 라인이상으로 작성된 소스코드에서의 수정사항을 알려 주고 수정해야 한다면 변경을 알려야 하는 사람에게 각 라인을 직접 수정하도록 하는 것은 어렵고 또한 작업자의 실수를 불러올 수 있을 것입니다.

3. diff를 이용한 patch 생성

  이제 원본 파일과 변경한 파일에 대한 내용을 만들었으므로 diff 를 이용하여 변경 정보가 기록된 patch 파일을 만들면 됩니다. [그림 3] diff의 실행 결과 입니다.

urN 옵션을 적용하여 실행하면 양 쪽 디렉토리의 내용들을 비교하여 변경된 내용을 화면에 출력합니다. 그림에서 볼 수 있는 것 처럼 소스 라인 단위로 변경된 내용들을 보여 주며 이 내용을 화면에 출력하지 않고 파일에 저장하도록 하면 patch를 위한 파일이 만들어지게 됩니다.


그림 3. Diff의 실행 결과

[그림 4] diff의 실행하고 그 결과를 my_source.patch 파일로 생성한 내용을 보여 줍니다. head 프로그램을 사용해 살펴 보면 [그림 3]에서 출력했던 내용임을 알 수 있습니다.


그림 4. Diff를 통한 patch 생성

이렇게 생성된 patch 파일은 기존에 가진 자료에 대한 변경이 필요한 다른 사람에게 전달하고 하면 됩니다.

5. patch 적용

  전달 받은 내용은 patch 파일을 받아서 patch 툴을 이용해 적용하면 됩니다. 디렉토리 단위로도 적용이 가능하기 때문에 짧은 시간에 변경된 내용을 적용할 수 있습니다.

patch 툴을 이용할 경우 대상 디렉토리에 대한 수준을 지정할 수 있습니다.

-p 옵션의 경우 대상 디렉토리를 어느 수준까지 skip할 것인지를 지정하는 옵션입니다. 이 글의 예제에서는 diff patch를 만들 당시 원본 디렉토리인 source_ 대상으로 patch를 생성하였으므로 source_ 디렉토리가 위치하는 곳에서 patch를 적용해야 하기 때문에 –p0 옵션을 지정하게 됩니다. 만약 patch 파일을 source_나 다른 이름의 디렉토리로 복사하고 patch를 적용하고 싶을 때는

$ patch –p1 < my_source.patch 명령을 입력하면 됩니다.

[그림 5] patch를 적용하기 전의 내용을 보여주며 [그림 6]은 적용된 모습을 보여줍니다.


그림 5. patch 적용 전

[그림 6]을 통해 보면 빨간색 줄로 그어진 부분이 이전 내용과 비교해서 수정된 사실을 알 수 있습니다.


그림 6. patch 적용 후

간단한 예제를 통해서 diff, patch의 과정을 살펴 보았습니다. 예제로 사용된 내용은 아주 간단한 파일의 변경 내용을 patch로 만들고 배포, patch를 적용하는 과정 이었지만 크게 생각해 볼 때 많은 변경 점이 존재할 경우에는 유용하게 사용할 수 있습니다.

감사합니다. ^^