여러 디렉터리의 파일에 단일 패치 적용

여러 디렉터리의 파일에 단일 패치 적용

디렉토리 구조는 다음과 같습니다.

orig/l1/l2/file2patch

orig/l1-2/file2patch

그리고

new/l1/l2/file2patch

new/l1-2/file2patch

이 파일들 사이에서 정확한 차이점을 찾아 하나의 파일로 저장해 보았으나 적용이 쉽지 않은 것으로 나타났습니다.

patch -d orig/ < patch.diff나는 이것을 시도했지만 -d패치할 파일이 즉시 존재해야 한다고 예상했습니다.orig

디렉토리에서 패치를 다시 발생시키고 패치에 있는 지정된 파일에 패치를 적용할 수 있는 방법이 있습니까?

답변1

주어진 경로 이름이 올바르지 않은 것처럼 보이지만(특히 new다른 사람이 변경한 트리), patch이 옵션을 사용하여 출력에서 ​​주어진 디렉터리 수준 수를 무시하도록 프로그램에 지시할 수 있다는 것을 기억할 수 있습니다.diff-p

패치 파일에 표시된 디렉토리와 다른 디렉토리에 있는 파일에 패치를 적용할 때 cd해당 디렉토리로 이동하여(일치하지 않는 부분을 취소하기 위해) 이 -p옵션을 사용하여 cd.

다음은 문제를 해결한 방법을 보여주는 짧은 스크립트입니다(간단한 목록을 위해 GNU 패치의 테스트 실행 옵션 사용).

#!/bin/sh
cd /tmp/foo
OUT=/tmp/patch.diff
rm -f $OUT
diff -u orig/l1/l2/file2patch new/l1/l2/file2patch >>$OUT
diff -u orig/l1-2/file2patch new/l1-2/file2patch >>$OUT

diffstat -p1 $OUT
cd orig
patch -p1 --dry-run <$OUT

입력하다:

$ find . -type f
./new/l1/l2/file2patch
./new/l1-2/file2patch
./orig/l1/l2/file2patch
./orig/l1-2/file2patch

산출:

$ /tmp/xx
 l1-2/file2patch  |   19 +++++++++++++------
 l1/l2/file2patch |    5 ++---
 2 files changed, 15 insertions(+), 9 deletions(-)
/tmp/foo/orig
patching file l1/l2/file2patch
patching file l1-2/file2patch

추가 자료:

관련 정보