다른 개발자에게 패치를 보내고 합병 충돌을 피하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/293768

문제

다른 개발자에게 보내기 위해 커밋에서 패치를 얻으려면 어떻게해야합니까? 그리고 나중에 나무를 병합 할 때이 패치와의 병합 충돌을 피하는 것이 가장 좋은 방법은 무엇입니까?

전복, GIT, Mercurial, BZR 등과 같이 선택한 VC 에서이 작업을 수행하는 방법을 설명하는 방법을 알고 있다면

도움이 되었습니까?

해결책

~ 안에 git 출력을 파이프 할 수 있습니다 git-diff 다음과 같은 두 커밋 사이에 :

git diff fa1afe1 deadbeef > patch.diff

보내십시오 patch.diff 개발자에게 그리고 그를 보자 git-apply 다음과 같은 그의 작업 공간에 :

git apply patch.diff

다른 개발자가 이미 자신의 저장소에서 사용할 수있는 커밋을 가지고 있다면 다음과 같이 병합하지 않고 항상 스스로 파이프 할 수 있습니다.

git apply < git diff fa1afe1 deadbeef

그럼 당신은 할 수 있습니다 추가하다 그리고 저지르다 차이의 변화 일반적인 방법.


이제 패치를 다시 마스터 브랜치 (공개)로 병합해야 할 때 흥미로운 부분이 있습니다. 다음 개정 트리를 고려하십시오 C* 적용된 패치입니다 C 마스터 지점에서 :

A---B---C---D          master, public/master
     \
      E---C*---F       feature_foo

당신이 사용할 수있는 git-rebase 주제 지점을 업데이트하려면 (이 예에서 feature_foo) 상류 머리입니다. 그 의미는 다음을 입력 할 때입니다.

git rebase master feature_foo

Git은 이와 같이 개정 트리를 재 배열하고 패치 자체를 적용합니다.

A---B---C---D          master, public/master
             \
              E*---F*  feature_foo

업스트림 분기와 병합하는 것은 이제 쉽게 빠르게 병합 될 것입니다. 또한 새로운 커밋인지 확인하십시오 E* 그리고 F* 이전처럼 일하십시오 E 그리고 F 각기.

동일한 단계를 사용하여 다른 개발자의 지점에 대해 동일한 작업을 수행 할 수 있지만 공개 저장소에서 수행하는 대신 가져 오기 개발자의 저장소로부터의 개정. 이런 식으로 당신은 다른 개발자에게 자신의 저장소에서 게시 한 내용에서 이미 구할 수 있는지 패치를 요청할 필요가 없습니다.

참고하십시오 공개 지점을 다시 비제하지 마십시오 명령은 사람들이 의존하는 지점에서하고 싶지 않은 GIT 기록을 다시 작성하고 원격 리포지토리와 병합 할 때 혼란을 일으킬 것입니다. 또한 잊지 마십시오 자주 통합 따라서 팀의 다른 사람들이 귀하의 변경에 참여할 수 있습니다.

다른 팁

SVN에서는 단순히 변경을 수행 한 다음 저작을하기 전에 SVN의 출력을 파일에 파이프로 파이프로 파일을 파일에 파이프 할 수 있습니다.

svn diff > mypatch.diff

그런 다음 변경 사항을 되돌리고 나중에 패치를 적용 할 수 있습니다.

patch -p0 -i mypatch.diff

항상 코드에 패치를 맹목적으로 적용하지 말고 항상 먼저 검사하십시오.

패치가 가져온 후 소스 파일이 크게 변경된 경우 패치가 소스 코드를 중단 할 수도 있습니다.

또한 코드를 확인하려고 할 때 합병 충돌이 없을 것이라고 보장 할 수 없습니다.

BZR은 "Merge Directive"를 보내는 것을 처리합니다. 즉, 상대방이 "확인"을 클릭 할 수 있도록 패치를 보냅니다. 병합 그리고 패치/신청 등으로 주변에 덜 가득 차 있습니다.

그냥 : $ bzr send -o mycode.patch

파괴적으로는 이것을하는 좋은 방법이 없습니다. 예, SVN Diff + 패치를 사용할 수 있지만 합병 될 때까지 문제를 연기 할 수 있습니다.

당신이 전복하여 그것을하는 방법은 분기를 만들고, 지점에 커밋을하고, 패치 수신자에게 지점으로 전환하도록 요청하는 것입니다. 그런 다음 평범한 방식으로 지점을 트렁크로 병합 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top