The data structures we use for reading already-written commits versus
building them don't need to be the same. It's cleaner if we can have
generic code which operates on a GFile implementation for reads,
because then we can share more generic code for walking and operating
on filesystem trees via GIO.