Git 패치 파일 만들어서 적용하기

SVN이든 git든 deploy할 때 svn updategit pull을 사용하지 못하는 경우가 있다. 이럴 때 patch를 이용하면 간편하다.

나 같은 경우 인터넷 접속이 되지 않는 내부 망 컴퓨터에 업데이트된 소스를 적용하기 위해 사용했다.

단, patch를 적용하는 시점의 소스를 정확히 기억해 둬야 한다. 패치를 적용할 때 기본 로직은 ‘x번째 줄을 삭제하고, 이런 소스를 넣는다’ 이거다.

당연한 말이지만 적용 대상 소스가 패치를 만든 소스와 다르면 적용이 안 된다.

git의 경우 아래처럼 쓴다.

git diff {from} {to} > patch-file-name.patch

실제 예시로 하면 아래와 같은 형식이 될 것이다. 아래 예시는 해시 주소로 예를 들었는데 tag 이름이나 branch 이름, HEAD 같은 키워드도 된다.

git diff c13cb93a2 04c317884 > patch-file-name.patch

명령의 결과는 우리가 늘 보는 git diff 화면이다. diff 명령 결과로 나오는 화면 자체가 표준적으로 사용되는 patch 파일 형식인 것이다.

>는 표준 출력 결과를 파일로 만들라는 뜻이다.

위 명령을 내린 경과 patch-file-name.patch라는 패치 파일이 생성된다.

(주의! 이 방법은 binary 파일은 적용되지 않고 text만 적용된다.)

생성된 patch파일을 들고 가서 적용을 하려면 일단 적용할 컴퓨터로 가서 patch 파일을 생성한 경로에 해당하는 경로로 간다. 그리고 아래 명령.

patch -p1 < /path/to/patch-file-name.patch

-p1 옵션은 패치 파일의 경로 앞에 붙은 prefix를 몇 단계나 제거하고 파일경로로 받아들일지 정하는 것이다. 예컨대 git의 diff를 하면 아래처럼 파일경로가 나온다.

--- a/application/views/session/login.php
+++ b/application/views/session/login.php

a/b/는 경로가 아니라 구분하기 위한 표시이다. 그래서 없애야 한다. 그래서 -p1 옵션을 주는 것이다. 저런 게 두 단계 있으면 -p2 옵션을 주면 된다.

카테고리 글 목록 👉

대표글

댓글 남기기