I use Git as a deduplication compressing backup tool. Git is fine and useful for a multitude of uses both manual and automated. Maybe the UI aka. porcelain is a bit clunky, but Git was explicitly intended to be separated into porcelain and plumbing, so that you can use the plumbing to make your own porcelain.
From git(1):
LOW-LEVEL COMMANDS (PLUMBING)
Although Git includes its own porcelain layer, its low-level commands
are sufficient to support development of alternative porcelains.
Developers of such porcelains might start by reading about git-update-index(1) and git-read-tree(1).
The interface (input, output, set of options and the semantics) to these
low-level commands are meant to be a lot more stable than Porcelain level
commands, because these commands are primarily for scripted use.
The interface to Porcelain commands on the other hand are subject to change
in order to improve the end user experience.
The following description divides the low-level commands into commands that
manipulate objects (in the repository, index, and working tree), commands
that interrogate and compare objects, and commands that move objects and
references between repositories.