tl; dr - Похоже, пришло время перейти в высшую лигу. Нанесение помады на свинью не делает ее более красивой, если только вы не увлекаетесь такими вещами ...
Проблема людей
Первая проблема - синхронизация фиксации. Если у вас есть несколько человек, работающих над одним и тем же кодом одновременно, вам нужно только одно правило для предотвращения проблем:
Rule 1: Always pull before you merge/rebase
Когда дело доходит до DVCS, трудно вносить изменения в удаленную ветку (то есть в главный репозиторий) и очень легко вносить изменения в локальную. Каждый человек отвечает за то, чтобы его собственные дополнения кода вписывались в большое целое без проблем. Если 2 человека не совершают в одно и то же время, вы не должны испытывать. Доступ для фиксации к источнику / удаленному мастеру должен быть ограничен только несколькими разработчиками, и они должны получать изменения от других разработчиков через ветви удаленного отслеживания.
Проблема с кодом
Откуда вы знаете, что сделанные вами изменения не нарушают код?
Простой ответ ... Напишите тесты, чтобы доказать, что они этого не делают. Если вы игнорируете школу мышления TDD (Test Driven Design), весь смысл тестов заключается в том, чтобы добавить уровень проверки, который позволяет изменять код, не нарушая его.
Rule 2: Don't make assumptions, write proofs (ie tests).
В дополнение к этому, перед выполнением перехода к исходному / удаленному мастеру необходимо выполнить полную гамму тестов.
Держите ваши коммиты как можно меньше и лаконичнее. Таким образом, если вам потребуется отменить изменения, которые позже что-то сломали, вы избавите от необходимости повторной реализации частей, которые не нарушали код.
Сначала вам может потребоваться некоторая организационная реструктуризация
Если вышеперечисленные решения не могут быть легко применены, возможно, существуют некоторые проблемы со структурой разработки, которые необходимо решить в первую очередь.
Владелец проекта должен быть привратником. Если есть проблемы синхронизации фиксации, вероятно, слишком много людей имеют доступ к фиксации. Даже в таких масштабных проектах, как ядро Linux, только немногие разработчики имеют доступ к исходному / удаленному главному репозиторию. На самом деле существует несколько уровней хранилищ для управления коммитами. Вместо модели фиксации в одном слое, где все отправляют свои изменения в исходную точку, в иерархической модели есть привратники, которые извлекают изменения и проверяют их качество перед включением в проект. Модель иерархической фиксации может масштабироваться намного больше и эффективнее, чем однослойная модель, не жертвуя качеством.
Разработчикам, которые не получают доступа к коммитам, они должны научиться создавать свои собственные ветки удаленного отслеживания (git и gitorious хороши для этого), чтобы разработчики, у которых есть доступ к коммитам, могли легко извлекать / интегрировать ветви в исходную точку . Если изменения невелики, патчи будут работать так же хорошо.
Возможность извлечения изменений перед выполнением слияния / перебазирования предполагает, что вы не разрабатываете свою локальную основную ветку. Самый простой способ справиться с этим - сначала выполнить кодирование, прежде чем начинать кодировать, а затем выполнить всю работу в этой ветви. Трудный путь состоит в том, чтобы разветвить его непосредственно перед слиянием и откатить мастер.
Определите стиль кодирования проекта в целом и заставьте разработчиков следовать ему. Вкладчики должны писать код, который соответствует стандартам / нормам проекта, чтобы минимизировать очистку. Стиль кодирования может стать большим барьером эго в открытом проекте. Если стандарт не установлен, все будут кодировать в своем предпочтительном стиле, и кодовая база станет очень уродливой и очень быстрой.
Миф о "Мифическом месяце человека"
Верьте или нет, более крупные / более успешные проекты с открытым исходным кодом не работают как демократия. Они работают как иерархия. Заявление о том, что проект не может эффективно выйти за пределы 8-10 разработчиков, наивно. Если бы это было правдой, то таких мегапроектов, как ядро Linux, не было бы. Более глубокая проблема заключается в том, что предоставление каждому обязательного доступа просто затрудняет эффективное взаимодействие.
Проблема мифического человека месяц действительно может быть преодолена. Вам просто нужно запустить свой проект, как военные. Существует много уровней в иерархии, потому что общеизвестно, что отдельные люди действительно эффективны только в управлении коммуникациями с горсткой людей. Пока ни один человек не отвечает за управление работой более 5-7 человек, система может масштабироваться бесконечно.
Это может ограничить лучших / опытных разработчиков в большей интеграции и проектировании / планировании более высокого уровня, но это не плохо. Частью увеличения является движение, чтобы решить, что проекту нужен долгосрочный план. Люди на самых высоких уровнях, которые имеют самые большие инвестиции (время также является ресурсом) в будущем проектов, должны нести ответственность за принятие важных решений.
Приятно слышать о проекте с открытым исходным кодом, переживающем трудности роста Поздравляю и удачи.