이름과 경로가 다른 파일에 Git 패치를 적용하는 방법은 무엇입니까?
저장소가 두 개 있습니다.하나로 파일을 변경합니다../hello.test변경 사항을 커밋하고 해당 커밋에서 패치를 생성합니다.git format-patch -1 HEAD이제 hello.test와 내용은 같지만 다른 이름으로 다른 디렉터리에 있는 두 번째 저장소가 있습니다../blue/red/hi.test위에서 언급한 패치를 다음에 적용하려면 어떻게 해야 합니까?hi.test파일? 노력했습니다.git am --directory='blue/red' < patch_file하지만 물론 그것은 파일 이름이 같지 않다는 것을 불평합니다(Git이 신경쓰지 않는다고 생각했습니다).특정 파일에 적용하기 위해 diff를 편집할 수도 있지만 명령 솔루션을 찾고 있습니다.
를 사용하여 패치를 생성한 다음 디프를 적용할 파일을 지정할 수 있는 유틸리티를 사용하여 패치를 적용할 수 있습니다.
예:
cd first-repo
git diff HEAD^ -- hello.test > ~/patch_file
cd ../second-repo
patch -p1 blue/red/hi.test ~/patch_file
수동 패치 편집이나 외부 스크립트를 사용하지 않는 간단한 솔루션이 있습니다.
첫 번째 리포지토리(커밋 범위를 내보낼 수도 있음)에 다음을 추가합니다.-1하나의 커밋만 선택하려는 경우 플래그):
git format-patch --relative <committish> --stdout > ~/patch
두 번째 리포지토리:
git am --directory blue/red/ ~/patch
사용하는 대신--relative에git format-patch또 다른 해결책은 사용하는 것입니다.-p<n>의 옵션.git am옷을 벗기다n유사한 질문에 대한 답변에서 언급한 것처럼 패치의 경로에 있는 디렉토리입니다.
또한 실행할 수 있습니다.git format-patch --relative <committish>을 제외하고--stdout그리고 그것은 일련의 것을 생성할 것입니다..patch파일입니다. 그러면 이 파일들을 직접 공급할 수 있습니다.git am와 함께git am --directory blue/red/ path/to/*.patch.
@georgebrock의 답을 바탕으로 제가 사용한 솔루션은 다음과 같습니다.
먼저 평소와 같이 패치 파일을 생성합니다(예:git format-patch commitA..commitB).
그런 다음 대상 리포지토리가 깨끗한지 확인하고(변경되거나 추적되지 않은 파일이 없어야 함) 다음과 같은 패치를 적용합니다.
cd second-repo
git am ~/00*.patch
모든 패치 파일에 대해 "오류: XYZ가 인덱스에 없습니다"와 같은 오류가 표시됩니다.이제 이 패치 파일을 수동으로 적용할 수 있습니다.
patch --directory blue/red < ~/0001-*.patch
git add -a
git am --continue
각 패치 파일에 대해 다음 세 단계를 수행해야 합니다.
이렇게 하면 원래 커밋 메시지 등이 특별한 요구 없이 보존됩니다.git format-patch명령하거나 패치 파일을 편집할 수 있습니다.
당신의 상황에서 두 파일이 정확히 같은 것으로 알고 있어 패치가 성공할 것 같습니다.
그러나 동일하지는 않지만 유사한 파일에 패치를 적용하거나 대화형 패치를 적용하려는 경우에는 3가지 방식으로 병합합니다.
했다고 칩시다.A을 가리키자A~1이전 버전과 마찬가지로, 그리고 당신은 사이의 차이를 적용하고 싶습니다.A~1A 파로로B.
도구를 . 를 들어, Compare와 같이 는 3방향 병합입니다. 예를 들어, 비교를 넘어 왼쪽 패널의 경로는A는 간중패공조통상로경므로는이널은▁is▁middle경입니다.A~1는 오쪽패널경로는입니다.B그러면 아래쪽 패널에 다음과 같은 차이를 적용한 결과가 표시됩니다.A~1A 파로로B.
다음 그림은 이 아이디어를 보여줍니다.
참고: 최근에 Github에서 패치를 다운로드하여 로컬 파일에 적용하는 데 문제가 발생했습니다(새로운 위치에서 "오버라이드").
git am파일이 "인덱스에 없음" 또는 "인덱스에 없음"이기 때문에 패치를 적용하지 않습니다. 저는 하만단것, 한순이는저지것을 했습니다.patch명령이 패치를 적용할 수 있습니다.패치할 파일의 이름을 묻는 메시지가 표시되었습니다.
어쨌든, 일을 끝냈어요.
언급URL : https://stackoverflow.com/questions/16526321/how-to-apply-a-git-patch-to-a-file-with-a-different-name-and-path
'programing' 카테고리의 다른 글
| jQuery로 테이블 만들기 - 추가 (0) | 2023.08.27 |
|---|---|
| 오라클 오류, 열은 여기서 허용되지 않습니다. (0) | 2023.08.27 |
| WebAPI 파일 업로드 - 디스크에 파일을 쓰지 않음 (0) | 2023.08.27 |
| 단일 레코드만 가져오는 경우에도 Oracle을 통해 예상되는 대량의 I/O (0) | 2023.08.22 |
| 자바스크립트 함수를 매 분마다 실행하고 최대 3번 실행하기를 원합니다. (0) | 2023.08.22 |
