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