If you don’t already have a project in mind, here are some interesting examples: # git itself (approx.10MB download): $ git clone git://git.kernel.org/pub/scm/git/# the Linux kernel (approx.But the shortcut for “git branch” combined with “git checkout”? Specifying filenames completely changes the semantics of some commands (“git commit” ignores local, unstaged changes in foo.txt; “git commit foo.txt” doesn’t).The various options of “git reset” do completely different things.See also Appendix A, Git Quick Reference for a brief overview of git commands, without any explanation.Finally, see Appendix B, Notes and todo list for this manual for ways that you can help make this manual more complete.Status and diff should reflect what will happen when commit is used, so they should also recurse downward by default. With status, diff, commit and add recursing downwards, it would be confusing to users if other operations did not.
It has a powerful distributed model which allows advanced users to do tricky things with branches, and rewriting history.
However, in Git, and especially when using the default "merge workflow" (I'll write about merge workflow versus rebase workflow in another article), there are times when a single developer may be in charge of (and able to unintentionally break) the entire codebase all at once.
So here I'm going to describe two ways that I know of that this can happen.
NOTE: This is a design document for future work, not a description of anything bzr currently implements. For more up to date information see: document describes the current design of by-reference Nested Trees. It does not describe by-value trees, because these are indistinguishable from normal trees.
Subtree A tree which is inside another tree, which bzr has been asked to treat as part of the outer tree.
Containing tree A tree which has another tree inside it Tree reference A directory in a containing tree which contains a subtree.