Я задавал себе те же вопросы, когда мы пришли к реализации Subversion здесь - около 20 разработчиков работали в 4-6 проектах. Я не нашел ни одного хорошего источника с «ответом». Вот некоторые части того, как наш ответ развивался за последние 3 года:
- совершать так часто, как это полезно; Наше эмпирическое правило - коммит всякий раз, когда вы проделали достаточную работу, поэтому возникнет проблема с ее повторным выполнением, если изменения будут потеряны; иногда я фиксирую каждые 15 минут или около того, иногда это могут быть дни (да, иногда мне требуется один день, чтобы написать 1 строку кода)
- мы используем ответвления, как предлагал один из ваших предыдущих ответов, для разных путей развития; прямо сейчас для одной из наших программ у нас есть 3 активных ветви: 1 для основной разработки, 1 для еще не завершенной попытки распараллелить программу, и 1 для попытки пересмотреть ее для использования входных и выходных файлов XML;
- мы почти не используем теги, хотя считаем, что должны использовать их для идентификации выпусков в производство;
Думайте о развитии, идущем по единому пути. В какое-то время или в состоянии разработки маркетинг решает выпустить первую версию продукта, поэтому вы устанавливаете флаг в пути, обозначенном «1» (или «1.0», или что у вас). В какой-то другой раз какая-то яркая искра решает распараллелить программу, но решает, что на это уйдут недели и что тем временем люди хотят продолжать идти по основному пути. Таким образом, вы строите вилку на пути, и разные люди спускаются по разным вилкам.
Флаги на дороге называются «метками», а вилки на дорогах - это места, где «ветки» делятся. Иногда также ветви снова собираются вместе.
- мы помещаем весь материал, необходимый для сборки исполняемого файла (или системы) в хранилище; Это означает, по крайней мере, исходный код и файл make (или файлы проекта для Visual Studio). Но когда у нас есть значки, файлы конфигурации и все остальное, это входит в репозиторий. Некоторая документация попадает в репозиторий; безусловно, любая документация, такая как файлы справки, которая может быть неотъемлемой частью программы, полезна для размещения документации для разработчиков.
Мы даже разместили там исполняемые файлы Windows для наших производственных выпусков, чтобы обеспечить единое местоположение для людей, ищущих программное обеспечение - наши выпуски Linux отправляются на сервер, поэтому их не нужно хранить.
- мы не требуем, чтобы репозиторий всегда был способен предоставлять последнюю версию, которая собирает и выполняет; некоторые проекты работают таким образом, некоторые нет; Решение остается за менеджером проекта и зависит от многих факторов, но я думаю, что оно терпит неудачу при внесении серьезных изменений в программу.