私のコードに適用したい非常に大きなパッチファイルがあります。問題は、私のパッチの変更のいくつかがすでにコードに存在することです。パッチがすでに適用されている変更を正常に無視する方法はありますか?
この-N
オプションは私が望む効果を得ませんでした。すでに適用されているブロックが見つかると、拒否ファイルが生成され、そのファイルにブロックが適用されなくなります。その大きな塊を無視し、残りのパッチを適用し続けたいと思います。 .rejファイルを生成したい唯一の場合は、ブロックを適用できず、ブロックがまだ適用されていないようです。
これを行う方法はありますか?
ベストアンサー1
これを行うには、patchutilsをインストールする必要があります。
このスクリプトは大きなパッチを小さな個々のパッチに分割し、各パッチにはファイルブロックのみが含まれています。その後、これらのパッチを使用してそのパッチを適用できますpatch --forward
。
#!/bin/sh -eu
PATCH=$1
OUTDIR=$2
test -f "$PATCH" && test -d "$OUTDIR"
TDIR=$(mktemp -d)
trap 'rm -rf $TDIR' 0
INDEX=0
TEMPHUNK=$TDIR/current_hunk
lsdiff $1 | while read FNAME
do
HUNK=1
while :
do
filterdiff --annotate --hunks=$HUNK -i "$FNAME" "$PATCH" > "$TEMPHUNK"
HUNK=$((HUNK+1))
test -s "$TEMPHUNK" && \
{
mv "$TEMPHUNK" "$OUTDIR/$INDEX.diff"
INDEX=$((INDEX+1))
} || break
done
done
編集する:スクリプトをに保存しhunks.sh
て呼び出します。
./hunks.sh path/to/big.diff path/to/output/directory