Eu também tenho tido esse problema, que ainda não está resolvido no Mendeley. Com base na ótima sugestão do queue, resolvi meu problema usando o emacs, mas no modo batch, permitindo que eu envolvesse a solução em um shell script.
Primeiro, criei o seguinte script emacs lisp (vamos chamá-lo de bibsort.el):
( defun bibsort()
( bibtex-sort-buffer )
( save-buffer )
)
Isto classifica qualquer arquivo bibtex pelo nome da chave e salva-o. Você pode chamar o script no modo em lote a partir da linha de comando. Eu fui mais longe escrevendo um script de shell para chamá-lo para cada arquivo bibtex que Mendeley tinha reordenado (com ou sem novas referências), verificando o código de retorno de "git diff filename " (isso economiza tempo não executar o código lisp desnecessariamente em arquivos que não foram alterados).
Aqui está o script de shell (vamos chamar imaginativamente de bibsort.sh), que assume que ambos os arquivos bibtex e o script lisp estão no diretório atual:
#!/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
Basta executá-lo (depois de configurar as permissões de arquivo, se necessário) antes de cada commit do git:
chmod a+x bibsort.sh
./bibsort.sh
git commit ...
Ele não vai tocar nas linhas extras não-bibtex adicionadas por Mendeley, e deve funcionar em qualquer instalação Unix / Linux com o emacs. Ele também funciona no console do GIT no Windows (que eu estou usando), mas você teria que instalar a compilação MINGW do emacs separadamente.
Para mim, o git commits agora funciona de maneira elegante e econômica. Espero que isso ajude ...