Project 3: Gitlet, your own version-control system

Introduction

Welcome to Gitlet, the final project of the semester! The following spec is incredibly long and detailed; it's easily the most nuanced project that you'll work on in this class. However, all of the information in this spec is here for a reason. Though you may not get through all of this info on the first, second, or even third read- throughs, please keep revisiting the various tabs on the left as you progress through the project. You'll often find the answers to your questions tucked away in some section of this spec, so it behooves you to refer to this document before relying on a Piazza, Gitbug, or office hours response (as generations of students have learned the hard way).

Lastly, while this project may seem quite daunting and intense, it's one of the most rewarding parts of the CS61B experience! Students have said as much for years; the lessons and techniques that you learn from completing this project will help you immensely in future projects, courses, and even jobs. So, without further ado, let's get started!

Note: This spec is now paginated, which means that each piece of the spec has its own dedicated page! We made this change to make the spec easier to navigate; however, if you prefer the old version of the spec with everything on one page, you can find that version here.

Acknowledgements

Thanks to Alicia Luengo, Josh Hug, Sarah Kim, Austin Chen, Andrew Huang, Yan Zhao, Matthew Chow, especially Alan Yao, Daniel Nguyen, and Armani Ferrante for providing feedback on this project. Thanks to git for being awesome.

This project was largely inspired by this excellent article by Philip Nilsson.

This project was created by Joseph Moghadam. Modifications for Fall 2015, Fall 2017, and Fall 2019 by Paul Hilfinger.