패치를 적용한 후 실행 취소하는 방법은 무엇입니까? .rej/.orig 파일

패치를 적용한 후 실행 취소하는 방법은 무엇입니까? .rej/.orig 파일

사건은 다음과 같습니다. 두 개의 파일이 있습니다: file1.c,file2.c

ls 
file1.c file2.c patch.diff
patch < patch.diff
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej 
(the same with file2.c)
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff
patch -R < patch.diff # I thought it will revert changes back
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej
(again, the same with file2.c)    
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff

이제 손상된 파일이 남아 있는데 어떻게 복구할 수 있는지 모르겠습니다. 두 번째 단계에서 *.orig 파일이 이미 손상된 변경 사항으로 대체된 것 같습니다. 어떤 아이디어가 있나요?

답변1

항상 원본 파일에서 백업 복사본을 만드는 것이 좋습니다.

patchcall 옵션을 사용하면 자동으로 이 작업을 수행할 수 있습니다 -b.

배경: 파일이 없으면 .rej다음을 호출할 수 있습니다.

patch -R

패치를 반전시키십시오. 그러나 문제가 발생하면 작동하지 않습니다.

file2.c.orig시작 시 파일이 이미 존재하는 경우 patch해당 파일은 삭제되고 현재 상태의 백업 복사본으로 대체됩니다.

이러한 파일이 있는 경우 .orig쉽게 원래 파일 이름으로 이름을 바꾸어 패치를 실행 취소할 수 있습니다.

단일 패치가 실패하는 경우 프로젝트의 모든 파일에 대한 모든 패치를 취소하는 것이 가장 좋습니다. 패치된 모든 파일에 대한 파일이 필요하므로 .orig다음을 사용하는 것이 좋습니다.

patch -b

이러한 파일이 있으면 .orig다음으로 전화할 수 있습니다.

for i in *.orig; do
    base=`basename $i .orig`
    mv $i $base
done

관련 정보