Как на самом деле работает слияние ветки (под капотом)? - PullRequest
5 голосов
/ 08 января 2009

это может быть наивный вопрос, но, как спрашивается в объекте, каков реальный способ, используемый версиями программного обеспечения для слияния ветви обратно в основную магистраль без генерации неработающего кода?

Вот краткий пример: я делаю ветку из основного ствола для программы «Hello World Power edition». Я добавляю поддержку клингона. Это радикальное изменение, которое меняет способ работы функции printHelloWorld ().

Между тем, из-за ошибки # 749, из-за которой "Hello World" было написано "Helo World", функция printHelloWorld () в основной стволе была изменена.

Теперь проблема, которую я вижу здесь, заключается в следующем: когда я сливаюсь по ветви обратно в основной ствол, я экспериментирую с конфликтом функции printHelloWorld () внутри файла sayHello.py

Как программа VCS узнает, как добавить поддержку Klingon из моей ветки и , чтобы сохранить исправление ошибки в основной магистрали? Каковы стратегии человека или программного обеспечения, чтобы избежать этого?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 08 января 2009

Как программа VCS знает, как добавить поддержка клингонов из моего филиала и оставить исправление в главном сундуке?

VCS ничего не знает о семантике вашего исходного кода, он видит его как набор текстовых / двоичных файлов. Система VCS использует diff / merge алгоритмы для обнаружения конфликтов между вашей и текущей версией файла. Вы несете ответственность за разрешение таких конфликтов, потому что только вы знаете семантику этих изменений. Некоторые VCS, такие как SVN, требуют, чтобы вы обновляли свою рабочую копию последними изменениями из транка, прежде чем позволить вам зафиксировать изменения, чтобы убедиться, что ничего не потеряно.

Чтобы убедиться, что вы ничего не сломали и все предыдущие исправления ошибок не были нарушены, вы должны использовать проверки кода , модульные тесты и другие методы. Непрерывная интеграция - это хороший способ поддерживать работоспособность программного обеспечения.

0 голосов
/ 08 января 2009

Прежде чем вы сможете объединить вашу ветку с транком, система контроля версий обновит вашу рабочую копию с изменениями в транке, так как вы разветвились. Это просто не позволит вам объединиться без этого обновления. Это гарантирует, что вы получите все исправления ошибок в стволе при следующем коммите.

Хорошая стратегия для работы с веткой - это регулярно переносить изменения в транке в вашу ветку. Это гарантирует, что вы не дрейфуете слишком далеко от магистрали, что приводит к проблемам при последующем слиянии с магистралью.

0 голосов
/ 08 января 2009

В таком случае система контроля версий не может объединиться автоматически, вы должны выполнить объединение вручную. Хорошие юнит-тесты помогут вам убедиться, что ни одна функциональность не потеряна.

...