Hi, Management of opendocument files in git has been discussed a short time ago. Here is an helper script that may help achieving better density in git packs containg blobs from openoffice files. To try it, save the following as "rezip" with execution permission: -----8<----------------------- #! /bin/bash # # (c) 2008 Sergio Callegari # # Rewrites a zip archive, possibly changing the compression level USAGE='Usage: rezip [options] [file] with options: [-h | --help] Gives help [-p ?] Lists known profiles [--unzip_opts options] Pass options to unzip helper to read zip file [--zip_opts options] Pass options to zip helper to write zip file [-p | --profile profile] Get options for helpers from profile Rewrites a zip archive, possibily changing the compression level. If the archive name is unspecified, then the command operates like a filter, reading from standard input and writing to standard output. Options can be manually provided to the unzip process doing the read and to the zip process doing the write. Alternatively a profile can be used to set options automatically.' PROFILES="ODF_UNCOMPRESS ODF_COMPRESS" PROFILE_UNZIP_ODF_UNCOMPRESS='-b -qq -X' PROFILE_ZIP_ODF_UNCOMPRESS='-q -r -D -0' PROFILE_UNZIP_ODF_COMPRESS='-b -qq -X' PROFILE_ZIP_ODF_COMPRESS='-q -r -D -6' die() { echo "$1" >&$2 exit $3 } UNZIP_OPTS="" ZIP_OPTS="" while true ; do case "$1" in -h | --help) die "$USAGE" 1 0 ;; -p | --profile) if [ "$2" = "?" ] ; then die "Avalilable profiles: ${PROFILES}" 1 0 ; else profile=$2 shift profile_unzip=PROFILE_UNZIP_${profile} profile_zip=PROFILE_ZIP_${profile} UNZIP_OPTS=${!profile_unzip} ZIP_OPTS=${!profile_zip} fi ;; --unzip_opts) UNZIP_OPTS=${UNZIP_OPTS} $2 shift ;; --zip_opts) ZIP_OPTS=${ZIP_OPTS} $2 shift ;; -*) die "$USAGE" 2 1 ;; *) break ;; esac shift done if [ $# = 0 ] ; then tmpcopy=$(mktemp rezip.zip.XXXXXX) cat > $tmpcopy filename="$tmpcopy" else tmpcopy="" filename="$1" fi workdir=$(mktemp -d -t rezip.workdir.XXXXXX) curdir=$(pwd) cd $workdir unzip $UNZIP_OPTS "$curdir/$filename" zip $ZIP_OPTS "$curdir/$filename" . cd $curdir rm -fr $workdir if [ ! -z "$tmpcopy" ] ; then cat $filename rm $tmpcopy fi --------8<------------------------ then put in your .git/config something like [filter "opendocument"] clean = "rezip -p ODF_UNCOMPRESS" smudge = "rezip -p ODF_COMPRESS" and finally set gitattributes as *.odt filter=opendocument *.ods filter=opendocument *.odp filter=opendocument Note: with this you might experience some delay on operations like git status git add git commit -a git checkout depending on the size of the opendocument files being tracked. Before using on anything sensitive, please test that it does what it should. The script should probably be made more robust against unexpected situations. Hope it can be useful to someone. Sergio -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html