Product information
Building Git is a deep dive into the internals of the Git version control system. By rebuilding it in a high-level programming language, we explore the computer science behind this widely used tool. In the process, we gain a deeper understanding of Git itself as well as covering a wide array of broadly applicable programming topics, including:
Unix concepts
- Reading and writing from files, making writes appear atomic, prevent race conditions between processes
- Launching child processes in the foreground and background, communicating with them concurrently
- Displaying output in the terminal, including colour formatting, paged output, and interacting with the user’s text editor
- Parsing various file formats, including Git’s Merkle-tree-based commit model, the index, configuration files and packed object files
Data structures
- How Git stores content on disk to make effective use of space, make the history efficient to search, and make it easy to detect differences between commits
- Using diffs to efficiently update the contents of the workspace when checking out a new commit
- Effectively using simple in-memory data structures to solve programming problems
- Parsing and interpreting a query language for addressing commits
Concurrent editing
- How Git uses branches to model concurrent edits
- Algorithms for detecting differences between file versions and merging branches back together
- Why merge conflicts happen, how they can be avoided, and how Git helps users prevent lost updates
- How merging can be used as the basis for numerous operations to edit the commit history
Software engineering
- Bootstrapping and growing a self-hosting system
- Test-driven development
- Refactoring to enable new feature development
- Crash-only software design that allows programs to be interrupted and resumed
Networking
- Using SSH to bootstrap a network protocol
- How Git repositories communicate to minimise the data they need to transfer when fetching content
- How the network protocol uses atomic operations to prevent users overwriting each other’s changes
What’s in the package?
- The complete book in PDF, ePub and Kindle formats
- All the example code, ready to run and tinker with
Free previews
- See the Table of Contents
- Read the sample chapter: Reshaping history