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.