git版本控制原理数据结构