What is the best way to Version-control Bibtex files managed by different JabRef versions

I have been searching over days to find a solution on tracking changes of a bibtex file using Git. The problem for me is that different versions of JabRef use different standards of bibtex source code styles and will mess up the tracked file even there is no content change. For example, I am using Docear to make mindmaps based on a bibtex file. The program actually uses JabRef 2.7.1. Sometimes, however, I need to open the same bibtex file using JabRef v3.6 on Windows and JabRef v2.10 on Ubuntu. All those actions of opening the bibtex file and save the file will reorder the fields in each entry and change “tab”/whitespace or even change the wrapping style in abstracts of each entry in different ways. In Git, I will see almost every line has been changed, even though there is no actual change on the entries.

I have tried to find solution to unify the style of sorting fields and control whitespaces in the bibtex code by changing some JabRef settings. Also, I am searching ways to reformat the file after each usage of the file in various JabRef versions. But so far I haven’t found a working solution to make the conversion control actually work. How should I deal with these styling problems caused by various versions of JabRef in order to efficiently track my bibtex file using version control?


We had a long discussion about the serialization format, especially at https://github.com/JabRef/jabref/issues/116. I fear, the only way is to wait that Docear gets updated. At least, with current JabRef, only the edited entry is changed to the new serialization format. With older versions, everything was written from scratch, which is horrible for version control.

We might need help to port Docear to JabRef 3.x. In case you know any students or other volunteers, just let us know!

Hi, I am the founder of Docear. As @koppor pointed out we would need to integrate the latest JabRef version into Docear. However, this will not happen anytime soon :-(.

@joeran and @koppor Thank you for responding! I was just wanting to submit an issue/bug to Docear a second ago. Beside the serialization issue, there is another horrible thing related to using an older version of JabRef in Docear is the encoding (I guess). Since older version of JabRef use “UTF8” while the new versions use “UTF-8” instead, whenever I open my bibtex file in Docear, UTF characters in a lot of my entries will be turned into some question marks ("???"). After a few iterations between switching between new versions of JabRef and Docear, I got a long series of question marks in different lengths on many of my Bibtex entries. The problem is my collaborators are using newer version of JabRef and other bibtex management software and we use version control on updating changes, this just enforced me to stop using Docear.

I guess I can manually change the UTF-8 to UTF8 every time I open Docear, but it is just a big hassle, not to mention the serialization problem. Anyway to avoid these issues and let me use Docear again? Sorry, I don’t know if there is any doc for me to think about helping Docear port to JabRef 3.x. Please point out.

Although this will not solve all the compatibility problems between the various JabRef versions, following a few recommendations may help in decreasing the number changes. See: http://help.jabref.org/en/SharedBibFile

@mlep, thank you. I haven’t noticed those tricks on the database property settings. Obviously, there is always always something new for me to learn on the JabRef settings. Is that any place for me to fine-tune the ordering of bibliography fields in each entry using an older version (v2.71, specifically)? My understanding on the latest version of JabRef is that the serialization property has been fixed to some particular order, but may be the older versions have some place to define the ordering of fields and always use lower letters for the field names? That is the main issue I have been encountering for now.

I am afraid your issue can only be solved by upgrading JabRef…