Git patch
패 치:
git-format-patch x..y
x y 는 해시 값 으로 x 에서 y 까지 순서대로 patch 를 칩 니 다.
커밋 패 치 만 생 성 한다 면 git - format - patch - 1 commt 를 사용 할 수 있 습 니 다.
과거 기록 부터 commt 를 git - format - patch -- root commt 로 시작 하려 면
제출 한 로그, 작성 자, 날짜 등 정보 가 담 겨 있다.당신 이 하고 싶 은 일 은 이 패 치 를 코드 라 이브 러 리 에 도입 하 는 것 입 니 다. 로그 도 도입 하여 나중에 유지 할 수 있 도록 하 는 것 이 좋 습 니 다.전통 적 인 패 치 방식 은...
patch -p1 < 0001--JFFS2-community-fix-with-not-use-OOB.patch
이렇게 패 치 를 치지 만 유용 한 정 보 를 잃 어 버 릴 수 있 습 니 다.
이 패 치 들 은 git format - patch 로 만들어 진 것 이 분명 하기 때문에 git 도구 로 잘 할 수 있 을 것 입 니 다.
git - am 은 바로 이 일 을 하 는 것 이다.
git - am 을 사용 하기 전에 먼저 git am – abort 를 한 번 사용 하여 이전의 am 정 보 를 포기 해 야 새로운 am 을 진행 할 수 있 습 니 다.그렇지 않 으 면 이런 실 수 를 당 할 것 이다.
.git/rebase-apply still exists but mbox given.
git - am 은 한 번 에 파일 이나 한 디 렉 터 리 에 있 는 모든 패 치, 또는 메 일 디 렉 터 리 에 있 는 패 치 를 합 칠 수 있 습 니 다.
다음은 두 가지 예 를 들 자.
cd small-src
git-am ~/patch/0001-trival-patch.patch
패 치 에 성공 하면 차 한잔 하 러 갈 수 있 습 니 다.
실패 하면 git 에서 오 류 를 알려 줍 니 다. 예 를 들 어:
error: patch failed: android/mediascanner.cpp:452
error: android/mediascanner.cpp: patch does not apply
그러면 패 치 를 먼저 보고 잘못된 파일 을 고 쳐 서 패 치 를 올 릴 수 있 도록 해 야 합 니 다.
cd opencore
git am ~/patch-set/*.patch
(여기 git 는 파일 이름 순 으로 am 이 patch 들) 모든 것 이 잘 되면 모든 patch 가 OK 되 고 당신 은 또 Lucky 가 됩 니 다.
그러나 순 조 롭 지 못 할 때 는 십중팔구 입 니 다. git am 중간 에 patch 를 만나면 am 은 이 patch 를 치 는 곳 에 멈 춰 서 어느 patch 가 안 되 는 지 알려 드 립 니 다.
예 를 들 어 저 는 지금 파일 file 이 하나 있 고 patch. file 의 내용 은?
the text
more text
두 패 치 는 각각:
0001-add-line.patch:
From 48869ccbced494e05738090afa5a54f2a261df0f Mon Sep 17 00:00:00 2001
From: zhangjiejing <zhangjiejing@zhangjiejing-desktop.(none)>
Date: Thu, 22 Apr 2010 13:04:34 +0800
Subject: [PATCH 1/2] add line
---
file | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/file b/file
index 067780e..685f0fa 100644
--- a/file
+++ b/file
@@ -3,3 +3,5 @@ file:
some text
more text
+
+add line
--
1.6.3.3
0002-change-line.patch:
From f756e1b3a87c216b7e0afea9d15badd033171578 Mon Sep 17 00:00:00 2001
From: zhangjiejing <zhangjiejing@zhangjiejing-desktop.(none)>
Date: Thu, 22 Apr 2010 13:05:19 +0800
Subject: [PATCH 2/2] change line
---
file | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/file b/file
index 685f0fa..7af7852 100644
--- a/file
+++ b/file
@@ -1,6 +1,6 @@
file:
-some text
+Change line text
more text
--
1.6.3.3
git am *. patch 실행
자, merge 이 patch, 오류 보고, Patch failed at 0001 add line 이렇게 우 리 는 0001 이 patch 를 보 았 습 니 다. 원래 patch 에 필요 한 것 은 some text 이 고, file 안에 the text 가 있 기 때문에 편집기 로 이 줄 을 some text 로 바 꾸 었 습 니 다.
vi file
git apply 0001-add-line.patch
git add file
git am --resolved
충돌 을 해결 한 후에, 예 를 들 어 git add 로 git 가 충돌 을 해결 했다 는 것 을 알 게 합 니 다.
git 에 서 는 diff 와 patch 를 직접 사용 하여 패 치 를 만 들 필요 가 없습니다. 위험 하고 번 거 롭 습 니 다. git 는 두 가지 간단 한 patch 방안 을 제공 합 니 다. 하 나 는 git diff 로 만 든 표준 patch 이 고, 다른 하 나 는 git format - patch 로 만 든 Git 전용 Patch 입 니 다.
1. git diff 생 성 표준 patch
우 리 는 먼저 git diff 로 patch 를 만 들 수 있 습 니 다. 이 예제 의 작업 디 렉 터 리 에는 "This is the file a" 라 는 내용 이 있 습 니 다. master 분기 에 놓 여 있 습 니 다. 코드 를 수정 하기 위해 서 는 새로운 가 지 를 만 드 는 것 이 일반적인 방법 입 니 다.
sweetdum@sweetdum-ASUS:~/GitEx$ git branch Fix sweetdum@sweetdum-ASUS:~/GitEx$ git checkout Fix Switched to branch 'Fix'
다음 에 우 리 는 a 파일 에 한 줄 을 추가 한 후에 git diff 를 실행 합 니 다.sweetdum@sweetdum-ASUS:~/GitEx$ echo 'Fix!!!'>>a sweetdum@sweetdum-ASUS:~/GitEx$ git diff diff --git a/a b/a index 4add65f..0d295ac 100644 --- a/a +++ b/a @@ -1 +1,2 @@ This is the file a. +Fix!!!
Git diff 의 출력 을 보 았 습 니 다. 이것 은 매우 전형 적 인 Patch 식 diff 입 니 다. 그러면 우 리 는 이 출력 을 Patch 로 직접 바 꿀 수 있 습 니 다.sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Fix" [Fix b88c46b] Fix 1 files changed, 1 insertions(+), 0 deletions(-) sweetdum@sweetdum-ASUS:~/GitEx$ git diff master > patch sweetdum@sweetdum-ASUS:~/GitEx$ git checkout master Switched to branch 'master'
우 리 는 현재 패 치 파일 이 하나 있 고 master 에 서명 하 였 습 니 다. 그 다음 에 git apply 를 사용 하여 이 패 치 를 응용 할 수 있 습 니 다. 물론 실제 응용 에서 우 리 는 이렇게 한 지점 에 패 치 를 만 들 지 않 고 다른 지점 에 응용 하지 않 습 니 다. merge 만 있 으 면 되 기 때 문 입 니 다. 우 리 는 지금 이 Fix 지점 이 없 는 것 으로 간주 합 니 다. 일반적인 상황 에서 master 를 보호 하기 위해 서, 우 리 는 master 를 사용 할 것 입 니 다.새로 제출 한 패 치 를 전문 적 으로 처리 하 는 지점 을 만 듭 니 다:
sweetdum@sweetdum-ASUS:~/GitEx$ git branch PATCH sweetdum@sweetdum-ASUS:~/GitEx$ git checkout PATCH Switched to branch 'PATCH' sweetdum@sweetdum-ASUS:~/GitEx$ git apply patch sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Patch Apply" [PATCH 9740af8] Patch Apply 1 files changed, 1 insertions(+), 0 deletions(-)
보 세 요. 현재 PATCH 분기 에 이 패 치 를 적용 하고 있 습 니 다. PATCH 분기 와 Fix 를 비교 해 볼 수 있 습 니 다. 결 과 는 아무것도 없 을 것 입 니 다. PATCH 분기 와 Fix 분기 가 똑 같 음 을 설명 합 니 다. patch 응용 에 성공 하 였 습 니 다. 여러 파일 이 있 더 라 도 git diff 는 하나의 patch 를 만 들 수 있 습 니 다.
2. git format - patch 에서 생 성 된 git 전용 패 치 입 니 다.
우 리 는 똑 같이 위의 예 를 들 어 작업 디 렉 터 리 를 사용 합 니 다. 이번 에는 Fix 분기 의 a 에 새 줄 을 추가 한 후에 git format - patch 로 patch 를 만 듭 니 다.sweetdum@sweetdum-ASUS:~/GitEx$ git checkout Fix Switched to branch 'Fix' sweetdum@sweetdum-ASUS:~/GitEx$ echo 'Fix!!!'>>a sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Fix1" [Fix 6991743] Fix1 1 files changed, 1 insertions(+), 0 deletions(-) sweetdum@sweetdum-ASUS:~/GitEx$ git format-patch -M master 0001-Fix1.patch
git format - patch 의 - M 옵션 은 이 patch 가 그 분기 와 비교 해 야 한 다 는 것 을 표시 합 니 다. 현재 patch 파일 이 생 성 되 었 습 니 다. 그것 이 무엇 인지 봅 시다.
sweetdum@sweetdum-ASUS:~/GitEx$ cat 0001-Fix1.patch From 6991743354857c9a6909a253e859e886165b0d90 Mon Sep 17 00:00:00 2001 From: Sweetdumplings
--- a | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/a b/a index 4add65f..0d295ac 100644 --- a/a +++ b/a @@ -1 +1,2 @@ This is the file a. +Fix!!! -- 1.7.4.1
보 세 요. 이번에 많은 것 이 많아 졌 습 니 다. diff 의 정보 뿐만 아니 라 제출 자, 시간 등 도 있 습 니 다. 자세히 보면 이것 은 E - mail 의 파일 입 니 다. 직접 보 내 셔 도 됩 니 다. 이런 patch 는 git am 으로 응용 해 야 합 니 다.
sweetdum@sweetdum-ASUS:~/GitEx$ git checkout master Switched to branch 'master' sweetdum@sweetdum-ASUS:~/GitEx$ git branch PATCH sweetdum@sweetdum-ASUS:~/GitEx$ git checkout PATCH sweetdum@sweetdum-ASUS:~/GitEx$ git am 0001-Fix1.patch Applying: Fix1 sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "PATCH apply"
패 치 를 제출 한 후에 현재 파일 a 의 상황 을 다시 볼 수 있 습 니 다.
sweetdum@sweetdum-ASUS:~/GitEx$ cat a This is the file a. Fix!!!
역시, 픽 스 가 하나 더 생 겼 어!!
그러나 주의해 야 할 것 은 master 와 Fix 분기 사이 에 여러 번 제출 하면 제출 할 때마다 patch 를 생 성 합 니 다.
3. 두 패 치 의 비교:
호환성: git diff 에서 생 성 된 Patch 호환성 이 뚜렷 합 니 다. 수 정 된 코드 의 공식 버 전 라 이브 러 리 가 Git 에서 관리 하 는 버 전 라 이브 러 리 가 아니라면 git diff 에서 생 성 된 patch 를 사용 해 야 프로젝트 관리자 가 코드 를 받 아들 일 수 있 습 니 다. 오류 제거 기능: git diff 에서 생 성 된 패 치 에 대해 서 는 git apply -- check 으로 패 치가 현재 분기 에 깨끗 하고 순조롭게 적용 되 는 지 확인 할 수 있 습 니 다. git format - patch 에서 생 성 된 패 치가 현재 분기 에 연결 되 지 않 으 면 git am 에서 힌트 를 주 고 패 치 작업 을 완성 하 는 데 도움 을 줄 수 있 습 니 다. git am - 3 을 사용 하여 3 자 합병 을 할 수 있 습 니 다. 자세 한 방법 은 git 손 을 참고 할 수 있 습 니 다.책 이나 Progit. 그런 점 에서 둘 다 잘못 나 누 는 기능 이 강하 다. 버 전 라 이브 러 리 정보: git format - patch 에서 생 성 된 패 치 에 이 패 치 개발 자의 이름 이 포함 되 어 있 기 때문에 패 치 를 사용 할 때 이 이름 은 버 전 라 이브 러 리 에 기 록 됩 니 다. 분명 적절 합 니 다. 따라서 현재 Git 을 사용 하 는 오픈 소스 커 뮤 니 티 에 서 는 format - patch 로 패 치 를 생 성 하 는 것 을 권장 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java swing drawImagegetImage 가 즉시 돌아 오기 때문에 그림 이 불 러 올 때 까지 기다 리 지 않 고 프로그램 에서 다른 작업 을 수행 할 수 있 습 니 다.성능 을 향상 시 킬 수 있 지만 효과 적 인 프로그램 은 더 많은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.