Разработка программного проекта обычно занимает продолжительное время и в большинстве случаев является итерационной. В связи с чем возникает необходимость хранить старые либо стабильные версии проекта доступные клиентам, а текущую работу выполнять над рабочей версией, которая обычно редко бывает в состоянии, полностью пригодном для использования.
Иногда задача усложняется: если в последней стабильной версии была обнаружена критическая ошибка, требующая немедленного устранения, а текущая рабочая версия к немедленному выпуску не готова, то необходимо открыть старые исходники, внести исправления там и, естественно, продублировать исправление в новых, если они также содержат эту ошибку. Так появляются ответвления, которые также нужно хранить отдельно.
В нашем случае разработка ведется командой, поэтому обойдись без специализированной системы управления версиями файлов практически невозможно: затраты времени и труда на согласование изменений, поиск необходимых версий и устранение конфликтов в одновременно измененных разработчиками файлах будут настолько велики, и их рост будет продолжаться быстрыми темпами при увеличении размера команды, что они просто станут основным препятствием на пути проекта.
Подобные системы позволяют решить не только проблему контроля версий, но и множество других: организовать резервное копирование, защитить от изменений файл, который уже изменяется другим разработчиком, обеспечить сравнение и слияние исходников.
Однако когда дело касается практики, то среди многообразия всех доступных решений сделать правильный выбор и начать использование системы контроля версий представляется весьма непростой задачей.