본문 바로가기
프로그래밍/etc. (Language)

[GIT] git diff patch 방법 정리.

by _BlankSpace 2017. 12. 9.

git 을 사용하다 보면 (즉, 협업 업무를 하고 있는 경우), 원격 저장소에 push하지 않고 로컬 내용에서 작업을 하는 경우가 있다.


이때, 작업 내용을 로컬에 push하기에는 애매한 데, 다른 협업자가 그 내용을 확인하고 싶을 경우에는 어떻게 해야 할까.


이러한 경우에 git에서는 diff 내용을 patch할 수 있다.

즉, 다른 내용 ( 수정한 내용 ) 을 빼내서, 다른 환경에 적용할 수 있도록 파일을 만든다고 생각하면 된다.


다음을 보자.

 git diff --no-prefix > patchfile         // 패치파일 생성 (patchfile 은 패치파일을 생성하고자 하는 파일명이다.)

 cd ~/Workspace                          // 패치하려고 하는 위치

 patch -p0 < patchfile                    // 패치 적용

위의 단계를 거치면, 패치를 적용한 위치에 동일한 작업이 적용된 것을 확인할 수 있을 것이다.



--no-prefix 옵션 없이 패치파일을 생성한 경우에는 -p1 옵션을 사용하여 패치를 적용한다.

 git diff > patchfile                        // 패치파일 생성

 cd ~/Workspace                          // 패치하려고 하는 위치

 patch -p1 < patchfile                    // 패치 적용



다음은 --src-prefix=<prefix> 옵션을 적용한 경우. <prefix>에는 붙일 이름이다.

 git diff --src-prefix=hello > hy2       // 이러한 방법으로 hy2라는 파일을 만들었다.


 파일 내용

 diff --git hello2017/06/17/a.out b/2017/06/17/a.out

 index 2df066e..f0a1baa 100755

 Binary files hello2017/06/17/a.out and b/2017/06/17/a.out differ

보는 것처럼, source 파일명 앞에 hello라는 prefix가 붙는다.


그럼 다음으로 --dst-prefix=<prefix> 는 어떨까.

확인해보자.

 git diff --dst-prefix=hello > hy3       // 이러한 방법으로 hy3라는 파일을 만들었다.


 파일 내용

 diff --git a/2017/06/17/a.out hello2017/06/17/a.out

 index 2df066e..f0a1baa 100755

 Binary files a/2017/06/17/a.out and hello2017/06/17/a.out differ

dst라는 옵션 처럼 destination 파일명에 hello라는 prefix가 붙는다.


git은 사용할수록, 알면 알수록 편함이 많은 툴인듯 싶다..


참고 내용

https://stackoverflow.com/questions/6764953/what-is-the-reason-for-the-a-b-prefixes-of-git-diff


공감 버튼은 저에게 큰 힘이 됩니다. 한번씩 꾸욱 눌러주시면 감사하겠습니다.

댓글