Unity Version Control System

UVCS is a version control system that is specialized for game development. It can also useful for similar use cases where a game engine is used to create interactive experiences. It is important to qualify and differentiate it from GiT / LFS, as the surface similarity can create anxiety and confusion for those coming from deep experience with GiT.

UVCS treats certain binaries as versioned entities and allows artifact locking for artwork changes. Much of this is done using meta files, which are ubiquitous in Unity projects. Where GiT LFS simply permits/tolerates large binaries, UVCS integrates metadata and smart file handling to manage binaries in a helpful, supportive way. Both offer the ability to lock binaries (and other files) to prevent the need for merges where they should be avoided.
Unity mentions that UVCS is similar to GiT in their documentation. Superficially, maybe. They are both distributed VC systems that allow pull requests and reviews, branching and merging features. They both offer visual interfaces built on a command-line API. It is even possible to coordinate UVCS and GiT on a common project by syncing a UVCS branch to a GiT branch. (I have not tried this yet.)
In practice I found the similarities between VCS’s tended to lull me into some incorrect assumptions about the details. The terminology used by UVCS to describe the architecture: “repository”, “project” and “workspace” are similar, but not equivalent, to these terms in GiT. Other details are unwelcome surprises, such as when directly deleting or renaming files in the file system. This can create massive merge problems for UVCS that GiT would take in stride.

A project in Unity is a higher level game property construct that is irrelevant in GiT. A Unity project includes many service offerings that constitute a game/entertainment/monetization ecosystem. A Unity developer might use these to more readily integrate them into their project or they may prefer to host their source code in a GiT instance.
If a Unity project includes the use of UVCS, it will associate a repository with it. You can have multiple repositories under a single project and multiple projects that share a common repository. But the default practice is to have a single repository per project.
