git patch 생성 방법
5436 단어 git
1.git diff에서 생성한 표준 patch
우리는 우선git diff로 패치를 만들 수 있다.본고에서 예시한 작업 디렉터리에는 처음에'This is the file a.'라는 파일 a가 있었는데 그 내용은 Master 분기에 놓여 있다.코드를 수정하려면 다음과 같이 새로운 분기를 만듭니다.
sweetdum@sweetdum-ASUS:~/GitEx$ git branch Fixsweetdum@sweetdum-ASUS:~/GitEx$ git checkout FixSwitched to branch 'Fix'
다음에 우리는 a 파일에 줄을 추가한 다음git diff를 실행합니다.sweetdum@sweetdum-ASUS:~/GitEx$ echo 'Fix!!!'>;>asweetdum@sweetdum-ASUS:~/GitEx$ git diffdiff --git a/a b/aindex 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] Fix1 files changed, 1 insertions(+), 0 deletions(-)sweetdum@sweetdum-ASUS:~/GitEx$ git diff master > patchsweetdum@sweetdum-ASUS:~/GitEx$ git checkout masterSwitched to branch 'master'
현재 패치 파일이 있고 마스터에 서명했습니다. 다음에git apply를 사용하여 패치를 적용할 수 있습니다.물론 실제 응용에서 우리는 이렇게 한 지점에patch를 만들고 다른 지점에 가서 응용하지 않을 것이다. 왜냐하면merge만 있으면 되기 때문이다.우리는 지금 이 픽스 지점이 없는 것으로 간주한다.일반적인 경우, 마스터를 보호하기 위해서, 우리는 새로 건네준 패치를 전문적으로 처리하는 지점을 세울 것입니다.
sweetdum@sweetdum-ASUS:~/GitEx$ git branch PATCHsweetdum@sweetdum-ASUS:~/GitEx$ git checkout PATCHSwitched to branch 'PATCH'sweetdum@sweetdum-ASUS:~/GitEx$ git apply patchsweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Patch Apply"[PATCH 9740af8] Patch Apply1 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 FixSwitched to branch 'Fix'sweetdum@sweetdum-ASUS:~/GitEx$ echo 'Fix!!!'>>asweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Fix1"[Fix 6991743] Fix11 files changed, 1 insertions(+), 0 deletions(-)sweetdum@sweetdum-ASUS:~/GitEx$ git format-patch -M master0001-Fix1.patch
git format-patch의 - M 옵션은 이 patch가 그 지점과 비교되어야 한다는 것을 나타낸다.patch 파일이 생성되었습니다. 그것이 무엇인지 봅시다.
sweetdum@sweetdum-ASUS:~/GitEx$ cat 0001-Fix1.patchFrom 6991743354857c9a6909a253e859e886165b0d90 Mon Sep 17 00:00:00 2001From: Sweetdumplings Date: Mon, 29 Aug 2011 14:06:12 +0800Subject: [PATCH] Fix1
---a | 1 +1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/a b/aindex 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 masterSwitched to branch 'master'sweetdum@sweetdum-ASUS:~/GitEx$ git branch PATCHsweetdum@sweetdum-ASUS:~/GitEx$ git checkout PATCHsweetdum@sweetdum-ASUS:~/GitEx$ git am 0001-Fix1.patchApplying: Fix1sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "PATCH apply"
패치를 제출한 후에 현재 파일 a의 상황을 다시 볼 수 있습니다.
sweetdum@sweetdum-ASUS:~/GitEx$ cat aThis is the file a.Fix!!!
역시 픽스가 하나 더 생겼다!!!
그러나 마스터와 픽스 지점 사이에 여러 번 제출되면 제출할 때마다 패치를 생성합니다.
메일 목록에 패치를 커밋하려면 다음과 같이 하십시오.
sweetdum@sweetdum-ASUS:~/GitEx$ git send-email --to --cc
주의:git send-email은 많은 기계에 기본적으로 설치되지 않아 수동으로 설치해야 합니다
요약하자면gitformat-patch를 이용하여 패치를 만드는 데는 다음과 같은 절차가 있다. 1) 새 지점 2) 새 지점에 대한 수정 3) 로컬 데이터베이스에 제출 수정 4) 이전 지점에 대한 패치 생성 5) 다른 새 지점, 패치 검증 6) 패치를 메일 리스트에 제출한다.
3. 두 패치의 비교:
호환성: git diff에서 생성한 Patch의 호환성이 매우 뚜렷하다.만약 당신이 수정한 코드의 공식 버전 라이브러리가Git가 관리하는 버전 라이브러리가 아니라면git diff가 생성한patch를 사용해야만 프로젝트 관리자가 코드를 받아들일 수 있습니다.
오류 제거 기능:git diff가 생성한 패치에 대해git apply--check로 패치가 현재 지점에 깨끗하고 순조롭게 적용될 수 있는지 확인할 수 있습니다.만약git format-patch에서 생성한 패치가 현재 지점에 맞지 않는다면 git am은 힌트를 주고 패치 작업을 완성하는 데 협조할 것입니다. 당신도git am-3을 사용하여 삼자 합병을 진행할 수 있습니다. 상세한 방법은git 매뉴얼이나 Progit를 참고할 수 있습니다.이 점에서 보면 양자 오류 제거 기능이 모두 매우 강하다.
버전 라이브러리 정보:git format-patch에서 생성한 패치에 이 패치 개발자의 이름이 포함되어 있기 때문에 패치를 사용할 때 이 이름은 버전 라이브러리에 기록됩니다. 분명히 이렇게 하는 것이 적절합니다.따라서 현재Git를 사용하는 개원 커뮤니티에서는 format-patch를 사용하여 패치를 생성하는 것을 권장합니다.
4.git 적용 patch
우선 다음 명령을 통해 patch의 내용을 볼 수 있습니다.
git apply --stat patch_name.patch
패치를 본 후 패치를 정식으로 적용하기 전에 패치를 테스트해 보는 것이 좋다.
git apply --check patch_name.patch
만약 아무런 오류가 발생하지 않았다면 축하합니다. 이 패치를 정식으로 적용할 수 있습니다. 이 패치를 정식으로 적용하려면 git apply가 아닌 git am 명령을 통과해야 합니다.git am은sign off라는 단어 패치의 응용을 통해 후속 역사 기록에서 추적하고 참고할 수 있도록 합니다.
git am --signoff patch_name.patch
이렇게 패치는 마스터 지점에 정식으로 적용된다.git의log에서 이번 패치의 응용 내용을 누가 제출했는지 똑똑히 볼 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Heroku H10/503 오류 해결 방법 - 이야기오후 2시 30분까지 내 이해 수준에 따라 배포할 준비가 된 내 코드 를 완성했습니다. 몇 달 전에 플랫폼에 Node.js 앱을 배포하여 을 따르기로 결정했습니다. How to solve Heroku H10 erro...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.