As *.mo files are binaries compiled from *.po files, general CVS ettiquette is NOT to keep them but ignore them. Instead, most of the django ecosystem and django itself deliberately version these artifacts.
I can’t find former discussions about this workflow and I don’t understand the rationale for it. It causes recurring issues where *.mo and *.po files fall out of sync; git or any other CVS are unable to merge *.mo files; and they are essentially superfluous to the CVS history of a django project.
I understand the value of packaging *.mo files in both the source and wheel distributions, so that people making a django installation are not required to install the gettext development toolchain. But each package should achieve that by issuing a compilemessages command while building the distributed artifacts. Why is this not the most common approach in the django ecosystem?