Dir-tree mínimo que difiere con git

Estaba tratando de ver si podía convencer a git para crear treees de directorys sin formatting (sin involucrar todas las cosas relacionadas con el commit):

#!/bin/bash -ex olddir=${1%/} newdir=${2%/} patch=$3 : "${patch:=$newdir--$olddir.gdiff}" export GIT_DIR GIT_WORK_TREE trap 'rm -rf "$tmpd"' EXIT tmpd="$(mktemp -d)" GIT_DIR="$tmpd" git init --bare GIT_WORK_TREE="$olddir"; git add -A .; t0="$(git write-tree)" GIT_WORK_TREE="$newdir"; git add -A .; t1="$(git write-tree)" #git diff-tree --minimal "$t0" "$t1" git diff-tree --patch --binary --minimal "$t0" "$t1" > "$patch" 

El script funciona, pero lo que me molesta es que si el tree más nuevo elimina un gran file binary, el diff dirá algo así como:

 deleted file mode 100644 index a4cb08553c82100cd473bf9fcbbf4232038838dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250585 

y luego continúe para include un volcado ASCII de todo el file eliminado . No muy "mínimo". ¿Puedo hacer que salte esta información en el diff?

Las diferencias de Git están destinadas a ser totalmente reversibles, y como tal, cualquier file eliminado debe mostrar los contenidos eliminados. El uso de --binary le dice a Git que incluya files binarys en parches, por lo que esto le deja dos opciones:

  • --binary para que Git omita files binarys, y / o
  • decirle a git diff que produzca una diferencia irreversible , usando --irreversible-delete (o la forma abreviada de esto, -D ). Tenga en count que esto afecta a todas las eliminaciones, no solo a los files binarys.

La opción de eliminación irreversible era nueva en la versión 1.7.10.

(Por cierto, tenga en count que --minimal simplemente cambia del algorithm pnetworkingeterminado myers diff a uno que intenta producir less directivas de edición.)