커밋에서 다른 개발자에게 패치를 보내려면 어떻게해야합니까? 그리고 나중에 나무를 합병 할 때이 패치와의 병합 충돌을 피하는 가장 좋은 방법은 무엇입니까?다른 개발자에게 패치를 보내고 병합 충돌을 피하려면 어떻게해야합니까?
는 등 전복, 자식, 의욕, BZR 또는
당신은 단순히 커밋하기 전에 다음을 변경할 수 있습니다 SVN에서커밋에서 다른 개발자에게 패치를 보내려면 어떻게해야합니까? 그리고 나중에 나무를 합병 할 때이 패치와의 병합 충돌을 피하는 가장 좋은 방법은 무엇입니까?다른 개발자에게 패치를 보내고 병합 충돌을 피하려면 어떻게해야합니까?
는 등 전복, 자식, 의욕, BZR 또는
당신은 단순히 커밋하기 전에 다음을 변경할 수 있습니다 SVN에서당신은 파이프 같은 git-diff
둘 사이의 커밋 출력 할 수 있습니다
git diff fa1afe1 deadbeef > patch.diff
는이 같은 자신의 작업 공간에 개발자로 patch.diff
을 보내고 그에게 git-apply
를 보자
git apply patch.diff
다른 개발자가 이미 자신의 저장소에있는 커밋을 사용할 수있는 경우에는 다음과 같이 병합하지 않고 항상 자신의 파이프로 연결할 수 있습니다.
git apply < git diff fa1afe1 deadbeef
그런 다음 add과 commit의 차이점을 확인할 수 있습니다. the usual way.
여기에 패치를 공용 (공용)으로 다시 병합해야 할 때 흥미로운 부분이 있습니다.
A---B---C---D master, public/master
\
E---C*---F feature_foo
당신은 (feature_foo
이름이 예에서) 토픽 브랜치를 업데이트 git-rebase
를 사용할 수는 상류의 머리에 : C*
마스터 분기 C
에서 적용된 패치가 어디 다음 개정 나무를 생각해 보자.
git rebase master feature_foo
힘내과 같이 개정 나무를 재 배열하고 또한 패치 자체 적용됩니다 :
A---B---C---D master, public/master
\
E*---F* feature_foo
이제이 될 것 상류 지점에 병합을 사용하면 다음과 같은 것이에 입력 할 때 무슨 의미하는 것입니다 쉬운 빨리 감기 병합. 또한 새로운 E*
과 F*
이 각각 이전 E
과 F
으로 작동하는지 확인하십시오.
동일한 단계를 사용하여 다른 개발자의 지점에 대해 동일한 작업을 수행 할 수 있지만 공용 저장소에서 수행하는 대신 개발자 저장소의 버전이 fetching입니다. 이렇게하면 이미 다른 개발자에게 패치를 요청할 필요가 없습니다.
에 공개 브랜치을 리베이스하지 마십시오. 명령은 사람들이 의존하는 브랜치에 대해 원하지 않는 git 히스토리를 다시 쓰고 원격 저장소에 병합 할 때 엉망이 될 것이기 때문입니다. 또한 integrate often을 잊어서 팀 내 다른 사람들이 변경 사항에 참여할 수 있습니다.
, 파이프 출력으로 선택의 VCS에서이 작업을 수행하는 방법에 대해 설명하십시오 방법을 알고있는 경우 언제나처럼 맹목적으로 P는 적용되지 않습니다
patch -p0 -i mypatch.diff
을 사용하면 다음 변경 사항을 되돌리고 나중에 패치를 적용 할 수있는 등
svn diff > mypatch.diff
같은 파일에 SVN은 diff의 코드에 손을 대고 항상 먼저 검사하십시오.
패치가 만들어진 이후 원본 파일이 충분히 변경된 경우 패치를 통해 소스 코드가 손상 될 수도 있습니다.
코드를 체크인 할 때 병합 충돌이 발생하지 않을 것이라고 보장 할 수도 없습니다. git에서
BZR는 상대방이 단순히 병합에 "OK"버튼을 클릭 패치 주위 구부릴 덜있을 수 있도록 당신을 위해 패치를 보내는 의미하는 "통합 지침"을 보내 처리/적용 등
그냥 : $ bzr send -o mycode.patch
bzr send는 두 개의 다른 브랜치간에 병합 지시어 만 생성합니다. 단일 커밋 또는 체리 따기와 같은 패치를 만드는 방법과 이러한 패치를 적용 할 때 병합이 작동하는 방법을 찾고있었습니다. – Spoike
Subversion에는이 작업을 수행하는 좋은 방법이 없습니다. 예, 당신은 svn diff + patch를 사용할 수 있습니다. 그러나 이것은 병합을하기 전까지 만 문제를 연기 할 것이고 그때까지 잊었을 가능성이 있습니다.
Subversion에서 수행하는 방법은 분기를 작성하고 분기에서 커밋 한 다음 수신자에게 분기로 전환하도록 요청하는 것입니다. 그런 다음 일반적인 방법으로 트렁크로 분기를 다시 병합 할 수 있습니다.
나중에 git format-patch를 사용하여 패치를 포맷하고 git am을 사용하여 패치를 적용하고 커밋 할 수 있음을 알게되었습니다. 예 : git 형식 패치 -k --stdout R1 ... R2 | git am -3 -k – Spoike