implementing git is an interesting approach to learning it. i generally support this kind of stuff - however I think that this starts out implementing a source control solution rather than git in particular and its a shame that it follows git so closely later down the line in that regard (but completely understandable given the aim). solving the problems for yourself you can get some insight into why git is the way i…
On a side note, I'm always amazed when someone implements things that are complicated to me in a really understandable ways.