Как на самом деле работает слияние ветки (под капотом)?

StackOverflow https://stackoverflow.com/questions/423624

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

  

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top