* .orig 및 * .rej 파일을 생성하지 않고“patch”실행


20

이야기하는 것이 가능 patch생성되지 .orig.rej파일? 나는 패치가 이것을 만드는 것이 매우 성가신 것을 발견했다.

답변:


14

patch이외의 옵션을 제공하지 않으면 -pN패치가 제대로 적용되지 않을 때만 해당 파일이 생성됩니다.

따라서 불량 패치 생성 (또는 수락)을 중지하는 옵션이 있습니다. :)

현실 세계로 돌아가서 이것은 기능입니다. 때 patch(1)원본 파일에 패치 세그먼트를 적용하는 데 실패, 그것은 임시 원본 파일로 튼튼하게 복사 해 저장 *.orig에 거부 된 세그먼트를 덤프 *.rej및 패치 세그먼트를 적용하려고 계속합니다. *.rej비트 및 조각을 패치 된 파일에 복사 하여 파일을 열고 패치 프로세스를 수동으로 완료 할 수 있습니다 . *.orig패치 프로세스가 실수로 뭔가를 난파 할 때 파일이 유용 할 수 있습니다, 당신은 그것을 해결하기 위해 원래 버전을 참조 할 필요가있다.

나는 항상 *.rej*.orig파일의 텍스트로 나쁜 패치를 수정하지는 않지만 필요할 때 사용할 수있는 것이 좋습니다.

잘못된 패치를 수정하면 프로젝트 루트에서 다음 스크립트를 실행하여 신속하게 정리합니다.

#!/bin/bash
find . '(' \
    -name \*-baseline -o \
    -name \*-merge -o \
    -name \*-original -o \
    -name \*.orig -o \
    -name \*.rej \
')' -delete

cleanup-after-bad-patch긴 이름은 여전히 ​​필요한 파일을 제거 할 수 있기 때문에 실수로 실수로 실행되지 않도록하기 때문에 호출 합니다. 솔직히 말해서, 나는 보통 개발 시스템 cleanTabEnter에서이 스크립트를 찾기에 충분한을 입력하여 실행합니다 PATH.

추가 확인 패턴 은 병합 작업 중에 동일한 문제가 발생했을 때 선택한 버전 제어 시스템에서 출력 한 파일에 대한 것 입니다. VCS / SCM 도구 에 맞게 조정할 수 있습니다 .


7

패치가 백업을 생성하지 않도록하려면 -b--backup-...옵션을 생략하십시오 .

.rej파일 을 작성하지 않도록 지시하려면 명령 에 -r -옵션을 추가하십시오 .


4
이것은 나를 위해 작동하지 않습니다 – 그것은 단지 "-"라는 파일에 거부를 넣습니다. 이것은 매우 성가신 파일 이름입니다. Mac에서 버전 2.5.8을 사용하고 있습니다.
rjmunro

GNU patch 2.6맥 에서 작동 확인 아마도 아마도-r /dev/null
스튜어트 Cardall

3

--no-backup-if-mismatch옵션은 ".orig"파일을 피합니다.

--merge파일 내 충돌을 일으키는 옵션 을 시도 할 수도 있습니다 .

모든 경우에, 합병이 압도적 일 경우 신속하게 좋은 상태로 돌아갈 수있는 방법이 있어야합니다.


1

패치 v2.5.4가 붙어서 -r -라는 이름의 거부 파일을 생성합니다 -.

그 발견 --reject-file=즉, 빈 값이 종료 코드로 실패 패치를 일으키는 2 경우 그것이 파일을 거부 작성하려고합니다. 거부가 없으면 예상대로 작동합니다. 이전 버전의 패치에 대한 완벽한 솔루션은 아니지만 일부 상황에서는 이것이 허용되거나 바람직 할 수 있습니다.


0

내가 생각해 낼 수있는 최선의 방법은 (깔개 아래의 흙을 쓸어내는 방법)을 사용하는 것입니다 -r <tmpfile>.

# patch -r /tmp/deleteme.rej -i patchfile filetobepatched

v2.5.8부터는 -r -실제로 -파일을 작성 합니다.


-3

패치 -p1 -B / dev / null -r-<file.patch


-1 : 이것은 매우 나쁜 조언입니다. 첫째, -B플래그는 명령에서 보듯이 *.orig출력을로 보내지 않습니다 /dev/null. 일반 사용자가와 같은 파일에 쓸 수없는 경우가 있습니다 /dev/nullfoo.cpp. 루트로이 작업을 수행하면 /dev트리 에서 정크가 발생합니다 . 둘째, 파일을 -r -억제하지 않습니다 *.rej. bogus -B플래그 로 인한 오류로 인해 현재 디렉토리에서 호출 된 파일을 만드는 파일 없이 실제로 수행 할 작업이 표시되지 않기 때문에 그렇게하는 것처럼 보입니다 . -B-
Warren Young

1
@WarrenYoung man patch: "-r 기본 .rej 파일 대신 거부 파일에 거부를 넣습니다. 거부 파일이-이면 거부를 무시합니다."
Limbo Peng
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.