Very recently I used libgit2 in an application. It was quite nice. Then I noticed my build was failing because I make static binaries and my setup couldn't handle libgit2 via Haskell for some obscure reason. So I rewrote my Git layer to use the Git porcelain shell tools (git mktree, git hash-object, git commit-tree, etc) as a quick and easy way to get it working again. I find it quite typical that using native libraries via FFI instead of shelling out to programs leads to tedious problems. And that's part of why I cherish the Unix tradition of combining different programs; shell scripting is one manifestation of that.
(author here) Yup, that is exactly my experience. You're "solving" one problem but just creating another one: versions and dependencies. Shell is more reliable in that sense.
Less software is better. Git already exists, let's use it.
This link is in the article, I think a lot of people don't get it: