In version control systems, a repository is a data structure that stores metadata for a set of files or directory structure.[1] Depending on whether the version control system in use is distributed, like Git or Mercurial, or centralized, like Subversion, CVS, or Perforce, the whole set of information in the repository may be duplicated on every user's system or may be maintained on a single server.[2] Some of the metadata that a repository contains includes, among other things, a historical record of changes in the repository, a set of commit objects, and a set of references to commit objects, called heads.
The main purpose of a repository is to store a set of files, as well as the history of changes made to those files.[3] Exactly how each version control system handles storing those changes, however, differs greatly. For instance, Subversion in the past relied on a database instance but has since moved to storing its changes directly on the filesystem.[4] These differences in storage techniques have generally led to diverse uses of version control by different groups, depending on their needs.[5]