SW/Git

git format-patch : 패치 보내는 방법, 개념

얇은생각 2019. 10. 11. 07:30
반응형
Git은 분산 버전 제어 시스템으로 설계되었습니다. git format-patch 기능을 사용하여 중앙 집중식 Git 저장소가 없어도 실제로 검토 할 수있는 patch를 보낼 수 있습니다. 이것은 원격 Git 리포지토리가 다운되었을 때 매우 유용합니다.



patch 준비
변경 사항을 보낼 준비가되면 git format-patch [BASE_BRANCH_NAME]을 사용하십시오.

$ git format-patch master
0001-Update-build-matrix.patch
0002-Display-current-gemfile-when-run-bundle-update.patch

내 feature branch는 마스터보다 두 개 앞에 있는 커밋이므로 Git은 각 커밋마다 하나씩 두 개의 파일을 만듭니다. 파일을 검사하면 커밋 메시지와 함께 변경 사항이 표시됩니다.

From b2df28155560c68772063df3b3250d811e66f35e Mon Sep 17 00:00:00 2001
From: Prem Sichanugrist <prem@example.com>
Date: Mon, 25 Jan 2016 18:18:38 -0500
Subject: [PATCH 1/2] Update build matrix

Build Appraisal against these versions of Ruby

... snip ...

---
 .travis.yml | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 6b56084..52d0bff 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,12 +3,12 @@ sudo: false
 before_install: gem install bundler

 rvm:
-  - 1.8
-  - 1.9
-  - 2.0
-  - 2.1

... snip ...

--
2.7.0

파일을 하나만 만들려면 첨부 파일로 더 쉽게 사용하거나 다른 곳에 업로드하려면 --stdout 옵션을 사용하여 출력을 파일로 리디렉션할 수 있습니다.

$ git format-patch master --stdout > new-feature.patch
$ cat new-feature.patch

From b2df28155560c68772063df3b3250d811e66f35e Mon Sep 17 00:00:00 2001
From: Prem Sichanugrist <prem@example.com>
Date: Mon, 25 Jan 2016 18:18:38 -0500
Subject: [PATCH 1/2] Update build matrix

Build Appraisal against these versions of Ruby

... snip ...

--
2.7.0


From 54c7c4b5df552ef7540d4612c17dbbcc1079f47c Mon Sep 17 00:00:00 2001
From: Prem Sichanugrist <prem@example.com>
Date: Mon, 25 Jan 2016 18:14:06 -0500
Subject: [PATCH 2/2] Display current gemfile when run `bundle update`

This is done by setting `gemfile` setting directly and not through
`BUNDLE_GEMFILE` setting.
---

... snip ...

git diff를 사용하고 변경 사항을 파일로 파이프하는 것이 가능하지만 git format-patch는 변경 사항을 설명하는 커밋 메시지가 포함되어 있기 때문에 더 나은 방법이라고 생각합니다.



patch를 검토하려면
누군가로부터 patch 파일을 받으면 git am 명령을 사용하여 패치를 쉽게 적용 할 수 있습니다.

# Checkout to a new branch
$ git checkout review-new-feature

# If you received the patch in a single patch file
$ cat new-feature.patch | git am

# If you received multiple patch files
$ cat *.patch | git am

# Check the result
$ git log --oneline
6787572 Display current gemfile when run `bundle update`
928928c Update build matrix
...

git am과 병합하는 patch의 SHA는 동일한 SHA가 아닙니다. 그러나 커밋 메시지는 손상되지 않습니다.


반응형