자식 저장소에서 패치 또는 diff 파일을 만들어 다른 다른 자식 저장소에 적용하십시오.


155

WordPress 기반 프로젝트를 작업 중이며 WP의 새 릴리스 버전마다 프로젝트를 패치하려고합니다. 이를 위해 두 커밋 또는 태그 사이에 패치를 생성하려고합니다.

예를 들어, 내 리포지토리에서 다음 /www/WP을 수행합니다.

$git patch-format com1..com2 --stdout > ~/patchs/mypatch.patch

또는

$git patch-format tag1..tag2 --stdout > ~/patchs/mypatch.patch

/www/WP 자식 natif 워드 프레스

/www/myproject 내 자식 프로젝트 WordPress 기반

git apply우리가 다른 저장소에 있기 때문에 작동하지 않습니다 커맨드 라인, 나는 생각한다.

커밋없이 패치 파일을 생성하고 차등으로 다른 git 저장소에 적용 할 수 있습니까?

미리 감사드립니다.

답변:


243

다음에 적합한 통합 diffgit diff 를 생성하는 데 사용할 수 있습니다 .git apply

git diff tag1..tag2 > mypatch.patch

그런 다음 결과 패치를 다음과 같이 적용 할 수 있습니다.

git apply mypatch.patch

1
당신은 엔리코, 내가 사용 감사 $git diff -u tag1..tag2 > mypatch.patch하고 $git apply --stat > mypatch.patch대답은 0 files changed다른 제안하십시오? :)
zatamine

패치 파일의 경로를 인수로 지정해야합니다 git apply. 예를 들어 답변을 업데이트했습니다.
Enrico Campidoglio

1
나는 git diff -p tag1 tag2 > my.patch잘 작동했다.
barclay

통합 된 diff 형식으로 패치를 만들려면 어떻게합니까? sourceware.org/glibc/wiki/… 라고 Only unified diff (-uNr) format is acceptable.하지만 내가 git diff -uNr tag1..tag2 > mypatch.patch메시지를받을 때usage: git diff [<options>] [<commit> [<commit>]] [--] [<path>...]
Aaron Franke

2
주의 git diff ...+ git apply ...하지 삭제 처리 / 이동 파일이 제대로 ... 때 않는 git format-patch ...+ git am ...않습니다.
vrince

50

여러 커밋에 대한 패치를 생성하려면 format-patchgit 명령 을 사용해야합니다.

git format-patch -k --stdout R1..R2

커밋을 메일 박스 형식의 패치 파일로 내 보냅니다.

마지막 커밋에 대한 패치를 생성하려면 다음을 실행하십시오.

git format-patch -k --stdout HEAD^

그런 다음 다른 저장소에서 amgit 명령으로 패치를 적용하십시오.

git am -3 -k file.patch

참조 : man git-format-patchgit-am.


1
적용 할 수있는 패치는 patch -p1어떻습니까? sourceware.org/glibc/wiki/…
Aaron Franke

여기에 언급 한 바와 같이 나는 winodws에 리눅스에서 패치를 이동, 그래서 --ignore-공백을 사용했다 stackoverflow.com/questions/13190679/...
마헤

2
@AaronFranke, 당신은 '-p'옵션을 시도 할 수 있습니다 : git format-patch -p HEAD ^ 1
Piroxiljin

이것은 원래 커밋의 커밋 메시지, 작성자 및 커밋 날짜를 유지하는 이점이 있습니다.
M. Justin

0

하나의 특정 커밋에 대해서만 패치를 생성하려면 다음을 사용하십시오.

git format-patch -1 <sha>

패치 파일이 생성되면 다른 리포지토리가 사용중인 위치를 알고 있어야합니다. git am ${patch-name}

패치를 추가하기 전에 git apply --check ${patch-name}확실하지 않은지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.