ioerror

patch 사용법 및 옵션 - 소스코드의 차이점(Diff) 파일을 원본 파일에 적용하여 업데이트하는 명령어 본문

OS

patch 사용법 및 옵션 - 소스코드의 차이점(Diff) 파일을 원본 파일에 적용하여 업데이트하는 명령어

반응형

patch - Patch Files

파일의 변경 사항 정보를 담고 있는 디프(diff) 출력 파일을 원본 파일에 적용하여 자동으로 수정본을 생성하는 명령어이다. 주로 오픈소스 소프트웨어의 업데이트, 버그 수정, 또는 협업 과정에서 코드 변경 사항을 신속하게 반영하기 위해 사용된다. 텍스트 파일의 줄 단위 변경을 인식하여 동작하며, 원본 파일이 다소 변경되었더라도 컨텍스트를 분석하여 유연하게 패치를 적용하는 기능을 제공한다.

1. 명령어 용도

  • 오픈소스 프로젝트에서 배포된 버그 수정 패치 파일을 다운로드하여 로컬 소스코드에 일괄 적용할 때 사용된다.
  • 여러 파일의 변경 사항을 담은 디렉터리 수준의 패치를 한 번에 반영하여 버전을 업그레이드할 때 유용하다.
  • Git 등의 버전 관리 시스템을 사용하지 않는 환경에서 코드 변경점을 동료와 공유하고 적용하는 수단으로 활용된다.

2. 명령어 서식

Bash
 
patch [옵션] [원본파일 [패치파일]]
patch [옵션] < [패치파일]

3. 명령어 옵션

옵션 설명 사용가능 OS 및 쉘
-p[숫자] 패치 파일에 기록된 경로에서 제거할 디렉터리 경로의 단계를 지정함  
-R 패치를 역으로 적용하여 이미 패치된 파일을 원래 상태로 되돌림 (Rollback)  
-b 패치를 적용하기 전 원본 파일의 백업 파일을 생성함  
-d [디렉터리] 패치를 적용하기 전에 지정한 디렉터리로 이동하여 명령을 수행함  
-dry-run 실제 파일을 수정하지 않고 패치 적용 가능 여부만 테스트함 [Linux] [GNU]
-f 사용자 확인 과정을 생략하고 강제로 패치를 진행함  

명령어 옵션 사용시 결과 예시

예시 1: 기본적인 패치 적용 (단일 파일)

Bash
 
# 원본 파일과 패치 파일의 차이점을 적용함
patch main.c < fix_bug.patch
# 출력 결과:
# patching file main.c

예시 2: 디렉터리 경로 수정을 포함한 패치 적용 (-p 옵션)

Bash
 
# 패치 파일 내부 경로가 a/src/main.c 로 되어 있을 때, 맨 앞의 a/ 경로를 제외하고 src/main.c에 적용함
patch -p1 < update.patch
# 출력 결과:
# patching file src/main.c

예시 3: 패치 취소 및 원상 복구 (-R 옵션)

Bash
 
# 이미 적용된 패치를 거꾸로 수행하여 원본 상태로 되돌림
patch -R < fix_bug.patch
# 출력 결과:
# reversing patch file main.c backwards
# patching file main.c

예시 4: 모의 실행을 통한 테스트 (--dry-run 옵션)

Bash
 
# 파일에 변경 사항을 저장하지 않고 오류 여부만 확인함
patch --dry-run -p1 < update.patch
# 출력 결과:
# checking file src/main.c

4. 명령어 특이사항(유의사항)

  • 패치 파일 생성 시 diff -u 또는 diff -c 명령어를 통해 컨텍스트(주변 줄 내용)가 포함된 형태로 만들어야 patch 명령어가 정확하게 위치를 찾아 적용할 수 있다.
  • 패치 적용 중 충돌(Conflict)이 발생하면 .rej (Reject) 확장자를 가진 파일이 생성되며, 패치가 실패한 코드 조각이 해당 파일에 기록되므로 사용자가 수동으로 수정해야 한다.
  • -p 옵션의 숫자는 경로에서 슬래시(/)를 기준으로 몇 개의 디렉터리 단위를 날릴 것인지 결정하므로, 패치 파일 내부의 파일 경로 정보와 현재 작업 디렉터리의 위치를 반드시 비교한 후 지정해야 한다.

https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference

 

UNIX & Linux Command Reference

유닉스 / 리눅스 명령어 표유닉스와 리눅스 환경에서 자주 사용되는 필수 명령어들을 완벽하게 정리한다. 서버 관리, 프로그래밍, 일상적인 시스템 운영 등 어떤 목적이든 터미널 환경을 능숙하

ioerror.tistory.com

 

반응형
Comments