Моя команда из моего предыдущего работодателя использовала Git, и у нас это хорошо работало. Мы были не такими уж большими (возможно, 16 или около того, возможно, с 8 действительно активными коммиттерами?), Но у меня есть ответы на ваши вопросы:
- N-Way слияния не очень распространены. Мы разработали некоторые соглашения об именах ветвей, которые позволили нам написать сценарии, которые облегчили процесс «разработки релизов» (я использую страшные кавычки, потому что у нас не было инженера релизов), и люди создавали частные ветви функций, но мы редко возникла проблема с объединением более двух веток (см. следующую).
- (и № 3). У нас был центральный репозиторий на сервере разработки по трем причинам: (а) машина разработки имела RAID5 (более отказоустойчивый) и ночные резервные копии (рабочие станции не были ночными), (б) производственные выпуски были построены на сервере разработки, и (c) наличие центрального хранилища упрощенных сценариев. В результате N-way слияния просто не произошло. Самое близкое, что у нас было к N-way, это когда кто-то слился сбоку, а затем слился вертикально.
Git был для нас отличной вещью из-за его высокой степени гибкости; однако нам пришлось установить некоторые соглашения (имена веток и тегов, места репо, сценарии и т. д., процесс), иначе это могло бы быть немного хаотично. Как только мы создали соглашения, гибкость, которую мы имели, была просто фантастической.
Обновление: наши соглашения в основном были такими:
- каталог на нашем сервере NFS, в котором размещены все центральные репозитории
- У нас было несколько проектов, которые совместно использовали компоненты, поэтому мы разбили их на библиотеки, по сути, с их собственными репозиториями, и поставляемые проекты просто включили их в виде подмодулей git.
- были строки версий и имена релизов, навязанные нам сверху, поэтому мы просто использовали их варианты в качестве имен ветвей
- аналогично, для тегов они следовали именам релизов, продиктованных процессом
- поставляемые проекты содержали файл свойств, который я читал в сценарии оболочки, и это позволило мне написать один сценарий для управления процессом выпуска для всех проектов, даже при том, что у каждого были небольшие вариации процесса - вариации были учтены в этих файлах свойств
- Я написал сценарии, которые перестраивали бы доставляемый пакет из любого тега
- использование git позволило нам контролировать доступ с помощью PAM и / или обычных пользовательских разрешений (ssh и т. Д.)
- Существовали и другие соглашения, которые сложнее поместить в маркированный список, например, когда должно происходить слияние. На самом деле, я и еще один парень были своего рода «мерзавцами-гуру», и мы помогли всем понять, как использовать ветви и когда объединяться.
- Заставить людей делать коммиты небольшими порциями, а не сбрасывать diff-бомбы в основной ветке, было проблемой. Один парень вложил около двух недель работы в один коммит, и в итоге нам пришлось все это разгадать. огромная пустая трата времени и разочарование для всех.
- информативные и подробные комментарии для коммитов
Были и другие вещи, которые вы изучаете, когда ваша команда приобретает опыт и учится работать друг с другом, но этого было достаточно, чтобы начать работу.
Обновление : любой, кто следит за такими вещами, уже знает об этом, но Винсент Дрейссен написал основательное и довольно исчерпывающее (но не исчерпывающее) решение по ветвлению и выпуску с использованием Git . Я очень рекомендую использовать его процесс в качестве отправной точки, потому что по двум причинам:
- Многие команды делают это таким образом или используют какой-то близкий вариант (включая Linux, Git и многие другие команды проекта OSS), что означает, что этот метод был протестирован и настроен для успеха в большинстве случаев. Вы вряд ли столкнетесь с проблемой, с которой не сталкивались и не решали в рамках ограничений этой модели.
- из-за вышеизложенного, почти любой инженер с опытом работы с Git поймет, что происходит. Вам не нужно будет писать подробную документацию о фундаментальной природе вашего процесса выпуска; вам нужно только документировать вещи, относящиеся только к вашему проекту или команде.