Yo también he tenido este problema, que aún no se soluciona en Mendeley. Basado en la gran sugerencia de que que, resolví mi problema usando emacs, pero en modo por lotes, permitiéndome envolver la solución en un script de shell.
En primer lugar, creé el siguiente script emacs lisp (llamémoslo bibsort.el):
( defun bibsort()
( bibtex-sort-buffer )
( save-buffer )
)
Esto ordena cualquier archivo bibtex por nombre de clave y luego lo guarda. Puede llamar al script en modo por lotes desde la línea de comandos. Fui más allá al escribir un script de shell para llamarlo para cada archivo bibtex que Mendeley había reordenado (con o sin nuevas referencias), al verificar el código de retorno de "git diff filename " (esto ahorra tiempo al no ejecutar el código lisp innecesariamente en archivos que no han cambiado).
Aquí está el script de shell (imaginémoslo como bibsort.sh), que supone que tanto los archivos bibtex como el script lisp están en el directorio actual:
#!/bin/bash
bibliobasher() {
IFS=$( echo -en "\n" )
BIBFILES=*.bib
for bibfile in $BIBFILES
do
git diff --quiet "$bibfile" 2> /dev/null
if [ $? = 1 ]; then
emacs --batch -l bibsort.el "$bibfile" -f bibsort
fi
done
}
bibliobasher
Simplemente ejecútelo (después de configurar los permisos de archivo si es necesario) antes de cada confirmación de git:
chmod a+x bibsort.sh
./bibsort.sh
git commit ...
No tocará las líneas extra no bibtex agregadas por Mendeley, y debería funcionar en cualquier instalación de Unix / Linux con emacs. También funciona en la consola GIT en Windows (que estoy usando), pero tendría que instalar la compilación MINGW de emacs por separado.
Para mí, git commits ahora trabaja de manera elegante y económica. Espero que esto ayude ...