[Linux] patch 파일 만들고 적용하기
patch 파일을 만들고 적용해보자.
환경
- Linux 기반 시스템
- Bash shell(/bin/bash)
- patch, diff 그리고 git 명령어
patch, diff 그리고 git 명령어
patch 명령어
patch -pNUM < patchfile
patch
: 패치파일을 이용해 프로젝트나 파일에 패치를 적용하는 명령어입니다.- 패치파일은
diff
나git diff
를 이용해 만들 수 있습니다.
diff 명령어
diff [OPTION]... FILES
diff
: 두 파일 또는 프로젝트의 diff를 줄별로 비교 및 분석해주는 명령어입니다.- 자세한 예제는 아래 나와있습니다.
git diff 명령어
git diff
git diff
: 현재 git이 있는 프로젝트에서 어떤 파일들이 바뀌었는지를 나타내는 명령어입니다.git diff
를 이용해 바로 patch 파일을 만들 수 있습니다.
diff를 이용해 patch 파일 만들기
두 파일간에 patch 파일 만들기
사용법
diff -urN [old file] [patched file]
예시
# Make diff
diff -urN test-old.txt test-new.txt
# Make patch file
diff -urN test-old.txt test-new.txt > patch.patch
프로젝트 폴더간 patch 파일 만들기
사용법
diff -urN [old directory] [patched directory]
예시
# Make diff
diff -urN neutron neutron_patched
# Make diff file
diff -urN neutron neutron_patched > neutron_patch.patch
git diff로 patch 파일 만들기
- 바로 명령어를 사용해 파일로 남겨주시면 됩니다.
git diff > [patch file name]
patch 파일을 적용하기
사용법
patch -pNUM < patchfile
- 패치를 할 프로젝트나 파일의 위치에서 위의 명령어를 사용해 적용합니다.
NUM
은 패치 파일에 나와있는 경로에서 몇개를 제외할지를 나타냅니다. 예를 들어서 패치파일에a/neutron/service.py
로 나와있고-p1
을 하게 되면 앞에서 하나의 경로를 제외한neutron/service.py
에 적용이 되게 되며 만약-p2
를 하게 된다면service.py
에 적용이 되게 됩니다.
예시
- neutron 프로젝트 안에서 패치 적용
neutron_patch.patch
파일이 neutron 프로젝트 폴더 바로 바깥에 미리 생성되어 있어야 합니다.
# In neutron project
cd neutron
# Apply patch file
# Option -p1 could be different depends on your patch file
patch -p1 < ../neutron_patch.patch
사용 예제
0. 과정
- neutron 프로젝트를 clone하고 파일을 조금 변경한 후에 git diff를 이용해 patch 파일을 생성합니다.
- neutron 프로젝트를 다시 원상태로 복구하고 patch 파일을 적용해서 파일이 바뀌는지 확인합니다.
1. neutron 프로젝트 클론 및 수정
git clone https://github.com/openstack/neutron.git
cd neutron
vi [any file in this project directory]
1. 사용할 patch 파일 생성
- patch 파일은 자유롭게 만드셔도 됩니다.
git diff > ../neutron_patch.patch
neutron_patch.patch
diff --git a/neutron/service.py b/neutron/service.py
index 06bf4cd..67f93fe 100644
--- a/neutron/service.py
+++ b/neutron/service.py
@@ -1,4 +1,4 @@
-# Copyright 2011 VMware, Inc
+#aidfjaldfja;ifdjsaoe# Copyright 2011 VMware, Inc
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
diff --git a/neutron/worker.py b/neutron/worker.py
index 81e7110..a330fe0 100644
--- a/neutron/worker.py
+++ b/neutron/worker.py
@@ -9,7 +9,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
-
+#akdfjakl;dfja;kfld
from neutron_lib import worker
from oslo_config import cfg
from oslo_service import loopingcall
2. patch 파일 적용
- neutron을 원상태로 복구하고 아래 명령어를 시행합니다.
patch -p1 < ../neutron_patch.patch