My relationship with Git has always had its ups and downs. Since I first created the account, my GitHub tagline has always been “Doesn’t know how to use git properly”. It is a statement that has maintained its truth, and I expect it to do so for the foreseeable future. Git is a densely packed tool! With this article, you might realize the same tagline applies to most of Git's users too. in ident string: Max 100 +0000Again, a misleading error. Git's ident grammar is:name SP "" SP timestamp SP tz< and > are the only delimiters, and the field between them is positional. RFC 5322 explicitly permits , @ and spaces inside a quoted local part… This means that Git’s email field is not necessarily an email address. It doesn’t even check for an @ character’s existence.Git, weirdly, has a lot of duplicated and reimplemented functionality, which wouldn’t be a big problem if it wasn’t for the fact that no two parsers agree on what to do! I’m sure there are reasons why having a single parser for everything might not be what the maintainers want. But seeing so much of this non-deterministic behavior is worrying, at least to me, in my very weird use cases.Git is not made for thisAfter playing around with Git to this point, it has become obvious that git is not made for this purpose at all. This was my first time poking around git internals, and looking through the code. The jankiness, the trust-me-bros, and the 20-year-old pending TODOs were intriguing. I’m starting to question my level of trust in Git, yet I’m too emotionally bound to it to just break up… It’s effectively Git saying the age-old “it’s not you, it’s me.”I’ll continue to use git for the foreseeable future. It’s feature-complete for all of my work. This one exception is a use case in which, looking back, I should never have used git. Still, version control is something that coders have been refining since the 70’s. It’s weird to still have these quirks.Finding solutions and alternativesMy solution for these issues in the meantime was to store metadata files alongside the norms and build a web UI around them that implements most of git’s usefulness in a friendly interface. I still kept the promise of having chronologically ordered and dated commits, just that before 1970, all commits had to be dated one second apart from each other, to at least enable sorting them.I tested Git, Mercurial, and Fossil with historical commit dates. Git rejected pre-1970 commits through its normal commit path as we’ve seen. Mercurial, instead, accepted dates all the way back to the signed 32-bit-floor. This means it accepts commit timestamps only from 1901-12-13 20:45:52 UTC through 2038-01-19 03:14:07 UTC, the inclusive signed-32-bit Unix-time range; dates one second outside it are rejected rather than clamped or wrapped. This is actually a bit better than Git, spanning about 136 years, instead of 129. But, a bit less future-facing, given we won’t be able to commit in mercurial after 2038. (in less than 12 years!)It is important to note, though, Mercurial only has this issue because of a non-conditional guard that gets triggered on dates with values larger than the 32-bit span. This was justified in a 2005 commit, arguing for compatibility with 32-bit runtimes. To keep a 21-year-old compatibility check in a world where most of everyone has already deprecated 32-bit computing.The only option that stood the literal test of time was Fossil. It allowed storage of pretty much any date value, accepting the first commit of the corpus dated 1855. The actual limit of the julianday float is November 24, 4714 B.C. at noon UTC. Fossil rendered check-ins on all dates. This is because Fossil works with a SQLite backend and uses a REAL column with julianday values stored inside it.For raw historical dates, the very aptly named Fossil takes the crown. It is the only one of the three that could handle the full date range for our corpus cleanly.Conclusion: In Linus’ wordsThis excerpt is from the git README. It is very accurate; I don't have much else to add:The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang."global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room."goddamn idiotic truckload of sh*t": when it breaksReferencesThe repo that started it all: https://github.com/pisanvs/ley-chileThe web UI: https://leyes.pisanvs.clGit’s source code mirror on GitHub: https://github.com/git/gitThe fateful commit: https://github.com/git/git/commit/ecee9d9eEmail RFC https://www.rfc-editor.org/info/rfc5322/This article was published under HackerNoon’s Business Blogging program