Awesome, Nathan! I was going to say this is clearly a priority. Thanks so much for writing that. It is so much easier to iterate on it now you have begun. At first glance there is not much I would add or change.
Not sure about the word "bare"; for now I'll read it as a place-holder for whatever term we agree on. Suggested edits below. Nathan Hartman wrote: [...] > An initial, very-rough, draft, of what might go in the 1.15 release > notes, at least as I see this feature. Obviously, let me know if I'm > totally off here! > > New Client Features -> Bare Working Copies > > All Subversion working copies require extra storage space in addition > to the size of the checked out files. > > By default, the total storage space required is slightly more than > double the size of the checked out files. Subversion uses most of that > extra space to cache each file's BASE revision so that many operations > can work faster and offline. "so that operations such as diff and revert can work offline, and commit can send just the modified portions of a file to the repository server rather than the whole file. This optimises the speed and availability of these operations, on the assumption that network throughput to the server is often a bottleneck." > Starting in 1.15, users can check out a bare working copy to cut the > storage requirement by up to 50%. Instead of caching the BASE revision > of all files all the time, Subversion will only fetch and cache those > of individual files when needed, and will eliminate them when no > longer needed. The space savings come at a tradeoff of requiring a > connection to the repository for more operations as compared to a > normal working copy and may, depending on network speeds and file > sizes, introduce a perceptible delay when a BASE file is downloaded. > > This feature is motivated by use cases involving very large versioned > files that change infrequently, where keeping the cached BASE copy > wastes space and provides little or no benefit. This feature may also > be useful in other scenarios, such as where a very fast connection to > the server is available, the repository is local, available storage > space is very limited, etc. > > To check out a bare working copy: > > $ svn checkout --foo --bar $REPO $WC > > The command to check out a normal working copy is unchanged. The following table lists the Subversion commands that behave differently in a bare working copy. For each command, it shows the difference in how that command accesses the repository. > +----------+-------------------------------+ > | | Working Copy Type | > +----------+---------------+---------------+ > | Command | Normal | Bare | > +----------+---------------+---------------+ | cat (BASE) | No | Hydrate | | commit | Send-Delta | Send-Full | | conflict resolving (resolve/merge/up/sw) | Sometimes | Sometimes (...) | | diff (BASE) | No | Hydrate | | revert | No | Hydrate | | update/switch | Always | Always + Hydrate | > Legend: * Hydrate: this operation downloads and keeps the file's base revision, for each file that has a local content modification ('svn status' shows 'M' in the 1st column) and its base is not already stored in the working copy [1][2]. * Send-Delta: sends just the locally modified parts of each file's content. * Send-Full: sends the complete content of each locally modified file. * No: does not contact the server. * Always: always contacts the server. Once downloaded, Subversion keeps a file's base locally cached in the working copy, so that further operations on the file will not download the base from the repository again. It keeps the base in this way until one of these operations either restores the file to an unmodified state or detects that the file is no longer modified. For example, "commit" and "revert" will immediately discard the base of each file they operated on, because that file will no longer be locally modified, whereas "diff" will discard the base only if it finds there are no differences. [1] At the beginning of a given operation, Subversion will download missing bases of *at least* the files that this particular operation will use. It may download those of other files too, that this particular operation will not use. For example, in the initial implementation of this feature, Subversion considers all potential files in the smallest subtree that spans all the target files of the operation. The details of this behaviour are subject to change before and after the feature is released. [2] In evaluating differences between a file's working text and its base text, Subversion takes into account the "EOL style" and "keywords" settings. (See the 'svn:eol-style' and 'svn:keywords' properties.) Just as 'svn status' does not show 'M' in the first column for such differences, neither will these cause the base to be downloaded from the repository.