2013-06-27 2 views
14

패치 파일이 있습니다.git : 패치에 유효한 전자 메일 주소가 없습니다.

이 패치를 git 저장소의 코드에 적용하고 싶습니다.

전복을 사용했을 때이 프로세스는 매우 간단했습니다 : 오른쪽 클릭 -> 거북 svn -> 적용 패치. 항상 기대했던대로 작동합니다.

하지만 git을 사용하여이 작업을 수행 할 수 없습니다. 힘은 내 패치를 적용하지 않습니다. 불만 사항은

패치에는 유효한 전자 메일 주소가 없습니다.

내 질문은 : "이 상황에서 패치 파일을 적용하는 방법"

답변

9

힘내 작성 패치는 힘내 도구와 함께 적용해야합니다. 사용

git apply <patch> 

패치가 힘내와 함께 생성되지 않으면, 단지 힘내는의 뒤에 '패치 프로그램을 사용하십시오.

patch <patch> 

패치를 적용한 후, 평소와 같이 힘내에 추가하고 커밋 : 종종이 프로그램 '패치'입니다.

+1

정확히이 명령은 작동하지 않습니다. 위의 글은 놓친 이메일에 대해 불평하는 글입니다. – tmporaries

+0

Git으로 패치를 만들었습니까? – GoZoner

+0

아니요. tortoise diff 뷰어에서 생성 된 "통합 된"패치 형식입니다. – tmporaries

1

명령 줄 대신 그래픽 인터페이스를 사용하는 것이 더 도움이된다면 패치 적용을 포함하여 Git에서 많은 작업을 비교적 간단하게 수행 할 수있는 도구가 많이 있습니다. 내가 찾은 가장 유용한 것은 SourceTree이지만, 검색하면 다른 좋은 것들이있을 것이라고 확신합니다.

5

MBOX로 많은 오픈 소스 프로젝트에서 사용 pipermail에서 다운로드 파일을 사용할 수 있습니다. 이는 OP의 경우에는 작동하지 않지만 git ampipermail 메시지/패치와 함께 사용하면 동일한 증상/질문이 발생합니다.


파일의 백업을 만들고 줄을 추가 편집,

From: [email protected] (Proper Name) 

가 종종 라인이 이미 존재하지만 스팸 방지 기능은 텍스트에 @ 기호를 변환 한 수 에서. 당신이 그냥 @ 기호 '에서'을 대체하는 GNU sed 명령 등으로

sed -ie 's/\(From:.*\) at /\[email protected]/' *.patch 

을 파일들을 패치 할 수 있습니다. 그 후에 git am을 수락해야합니다. 이 마지막 변화의 패치 네 개의 파일을 만들 것입니다

  1. git checkout oldbranch
  2. git format-patch HEAD~4


    당신이 일반 명령을 사용할 수있는 자식 저장소에 액세스 할 수있는 경우는, (의 수를 변경 너의 경우).

  3. git am *.patch

  • git checkout master
  • 는 동일한 나중에 유용 할 수 있습니다 원격 저장소로 등 IDS, 메시지를 커밋 얻을. gitk이kdiff 같은


    도구 하지형식 패치와 같은 데이터를 생성 할 당신은 커밋 히스토리를하지 않습니다. 이러한 유형의 데이터가있는 경우 위와 같이 git apply을 사용하거나 패치를 생성해야합니다.

    참조 : Difference between git format-patch and git diff.

    +0

    .patch 파일에 전자 메일 주소를 추가 한 후, git은 SHA 해시가 부족하다는 사실에 대해 고발합니다. 나는 GoZoner의 대답을 시도 할 것입니다. –

    +0

    1 년 전 외국 프로젝트에서 일부 소스 코드를 복사 한 로컬 레포가 있습니다. 그 동안 프로젝트는 업데이트되었고 내 지역 레포 (repo)도 업데이트되었습니다. 나는 외국의 발전을 통합하고 싶다. 최신 버전을 구버전으로 복사하고 모든 차이점을 보여줌으로써 외국 프로젝트에 대한 변경 사항 패치를 만들었습니다. 나는 여전히 로컬 리포에이 통합 된 diff를 적용 할 도구를 찾지 못했습니다. –

    +0

    마침내 kdiff3를 사용했지만 이전에 만든 패치를 사용하지 않았습니다. –

    1

    커밋 메시지의 줄이 From: 인 경우이 오류가 발생할 수 있습니다. 예를 들어, 내가 오타를 수정하는 패치가 있고, 커밋 메시지 본문에 나는 있었다 : 형식 패치에 의해 생성 된

    Fixes a typo. 
    From: 873524cab1 "Introduced some bug on this commit" 
    

    .patch라는 파일이 이들 중 하나 두 From: 라인을했다 이메일 주소, 그리고 다른 하나는 저 빌어 먹을 메시지 였어. Git am은 두 번째 From: 라인을 집어 들고 이메일 주소를 찾으려고했습니다.

    수정 프로그램은 커밋 메시지를 줄 시작 부분에 From:이 없도록 변경했습니다.

    관련 문제