El parámetro de ruta de logging de Git parece evitar el guardado de salida en un file

Encuentro que la funcionalidad de git log es torpe en el mejor de los casos, tanto en la command-line como en las GUI que he probado, así que bash escribir un git alias que obtenga el historial de diferencias de un file y lo abra en un editor de text ( así que es más fácil para mí leerlo rápidamente).

Hasta ahora, he escrito el siguiente alias:

 [alias] trace = "!f() { NOW=$(date +"%Y.%m.%d_%H.%M.%S"); FILE="~/Documents/git-traces/file_diff_$NOW.txt"; > $FILE; git --no-pager log -p --follow --pretty=oneline -- $1 > $FILE; 'C:/Program Files/Sublime Text 2/sublime_text.exe' $FILE; }; f" 

Sin el parámetro -- $1 , el alias funciona muy bien: ejecuta el command de git log muy bien y almacena el resultado en el file generado.

Además, el command funciona bien cuando dejo el resultado en la console: muestra lo que quiero sin problemas.

Pero, con ambos -- $1 y > $FILE allí, el file termina vacío.

¿Alguien sabe por qué estos parameters no parecen funcionar juntos? ¿Alguna idea para que funcione?

Realmente no he hecho mucho scripting de shell antes, así que avíseme si acabo de hacer un nuevo error 🙂

EDITAR: Estoy usando msysgit v1.8.4 en Windows 7, en caso de que eso haga la diferencia.

Git inicia el shell en un modo POSIX , por lo que la expansión de tilde no es lo que se espera que sea:

La expansión de Tilde solo se realiza en asignaciones anteriores a un nombre de command, en lugar de en todas las declaraciones de asignación en la línea.

Use $HOME lugar de la ~ tilde. Y dale a este pequeño ejemplo una testing de manejo,

 $ git config alias.trace '!f(){F="$HOME/file_diff_$(date+"%Y.%m.%d_%H.%M.%S")"; git --no-pager log -p --follow --pretty=oneline -- "$@" > $F; head $F; }; set -x; f' 

Elimine el set -x vez que esté satisfecho de que todos los commands son los esperados.