Você precisará de patchutils instalados para isso.
Esse script dividirá um patch grande em paches separados menores, cada um contendo apenas um hunk para um arquivo. Você pode aplicar esses patches com 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
Editar : salve o script em hunks.sh
e chame-o:
./hunks.sh path/to/big.diff path/to/output/directory