Understanding Distributed Version Control Systems