Source code management (SCM) is used to manage changes to source code over time. There are two main types: centralized SCMs which keep the main copy of code in one central place, and distributed SCMs which allow full copies of the code across devices. SCMs provide version control, allowing developers to check out code, make changes, and commit changes back while resolving any conflicts between versions. Common SCMs include Git, Mercurial, Subversion and Team Foundation Server.