reference site: http://technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/
In fact, they need not be directly coded.
Just get git-difftool.
However, the following code would be useful to add what they want.
1) ~/.gitconfig
[diff]
external = git_diff_wrapper
[pager]
diff =
2) ~/bin/git_diff_wrapper
#!/bin/sh
# 1: orginal filename
# 2: left temporary filename
# 3:
# 4:
# 5: right temporary filename
DIR_BASENAME=`basename ${PWD}`
G_SZ_FN_LOG_FILE=/tmp/gitdiff_${DIR_BASENAME}_${PPID}.log
G_SZ_FN_TMP_ENV_FILE=/tmp/gitdiff_${DIR_BASENAME}_${PPID}.env
G_SZ_FN_RESUME_FILE=""
DIFF_WC=""
STIME=`date +%Y%m%d_%H%M%S`
SZ_TYPE=""
DEF_ENV_MODE_NONE=0
DEF_ENV_MODE_SKIP=1
DEF_ENV_MODE_PROC=2
DEF_ENV_MODE_EXIT=3
G_SZ_ENV_MODE=${DEF_ENV_MODE_NONE}
if [ -f ${G_SZ_FN_TMP_ENV_FILE} ]; then
G_SZ_ENV_MODE=`cat ${G_SZ_FN_TMP_ENV_FILE}`
fi
if [ ${G_SZ_ENV_MODE} == ${DEF_ENV_MODE_EXIT} ];then
kill -9 ${PPID}
exit
fi
if [ "$2" == "/dev/null" ]; then
SZ_TYPE="L_NULL"
elif [ "$5" == "/dev/null" ]; then
SZ_TYPE="R_NULL"
else
if [ "${1}" == "${G_SZ_FN_RESUME_FILE}" ]; then
G_SZ_ENV_MODE=${DEF_ENV_MODE_PROC}
echo "${DEF_ENV_MODE_PROC}" > ${G_SZ_FN_TMP_ENV_FILE}
elif [ "${G_SZ_FN_RESUME_FILE}" == "" ]; then
G_SZ_ENV_MODE=${DEF_ENV_MODE_PROC}
else
if [ ${G_SZ_ENV_MODE} == ${DEF_ENV_MODE_NONE} ]; then
G_SZ_ENV_MODE=${DEF_ENV_MODE_SKIP}
echo "${G_SZ_ENV_MODE}" > ${G_SZ_FN_TMP_ENV_FILE}
fi
fi
if [ "${G_SZ_ENV_MODE}" == "${DEF_ENV_MODE_SKIP}" ]; then
SZ_TYPE="F_SKIP"
else
DIFF_WC=`diff --strip-trailing-cr "$2" "$5" |wc -l`
if [ ${DIFF_WC} -eq 0 ]; then
SZ_TYPE="F_SAME"
else
SZ_TYPE="S_DIFF"
echo "${STIME} ${SZ_TYPE} ${1} ${2} ${5} wc(${DIFF_WC})" >> ${G_SZ_FN_LOG_FILE}
vimdiff "$2" "$5"
STIME=`date +%Y%m%d_%H%M%S`
SZ_TYPE="E_DIFF"
echo "${STIME} ${SZ_TYPE} ${1} ${2} ${5} wc(${DIFF_WC})" >> ${G_SZ_FN_LOG_FILE}
SZ_TYPE=""
fi
fi
fi
if [ "${SZ_TYPE}" != "" ]; then
echo "${STIME} ${SZ_TYPE} ${1} ${2} ${5} wc(${DIFF_WC})" >> ${G_SZ_FN_LOG_FILE}
fi
Comments
Post a Comment