사건은 다음과 같습니다. 두 개의 파일이 있습니다: 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
항상 원본 파일에서 백업 복사본을 만드는 것이 좋습니다.
patch
call 옵션을 사용하면 자동으로 이 작업을 수행할 수 있습니다 -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