Как лучше всего разветвлять проект с открытым исходным кодом?

Мне нужно настроить проект с открытым исходным кодом. Изменения предназначены для конкретной организации и не будут полезны для публичного проекта. Изменения в коде включают в себя отключение функций, которые не нужны организации (затрагивает 5 % кода), настройку других функций для организации (затрагивает 20 % кода) и добавление новых пользовательских функций (добавление около 10 % нового кода).

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

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


person Community    schedule 25.09.2008    source источник
comment
Интересная запись в блоге на эту тему.   -  person JC.    schedule 25.09.2008
comment
Это библиотека или приложение с открытым исходным кодом? Почему нельзя добавить функции в существующее приложение?   -  person David Nehme    schedule 25.09.2008


Ответы (6)


Лучше всего сначала попытаться объединить свои изменения в проект.

Если это не вариант, вы просто

  1. импортировать их текущий HEAD,
  2. внесите свои изменения в ветку
  3. обновить свое дерево от их
  4. слияние и повторное разветвление

Шаги 3 и 4 важны для поддержания вашего форка в актуальном состоянии. Это много работы, в зависимости от активности проекта и важности оставаться в курсе. Если очень важно, я бы обновлял и сливал хотя бы раз в неделю.

Вы можете предпочесть импортировать их дерево svn в git, чтобы упростить слияние, что вы будете делать чаще всего.

person Vinko Vrsalovic    schedule 25.09.2008

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

person David Nehme    schedule 25.09.2008
comment
Это идеально, но что, если по какой-либо причине исправления/улучшения не будут приняты в кодовую базу так быстро, как вам хотелось бы? Если вы работаете над проектом, в котором вы не являетесь администратором/владельцем, ожидание подобных вещей иногда не совпадает с установленными вами сроками. Интересно, это то, что означает ОП. - person alph486; 12.12.2014

Я думаю, что получение ваших вещей вверх по течению — самый безопасный способ, поскольку вы получаете все исправления ошибок бесплатно, а изменения, сделанные выше по течению, не сломают ваши вещи, поскольку другие участники также должны уважать ваши «особенности», потому что они являются первоклассными гражданами в проекте. . Если это неприемлемый вариант, я бы сказал, что git с его подрывным мостом - это путь, как в нем уже есть много функций, которые полезны для разветвления, что в любом случае является естественным способом делать что-то в git, поскольку все является своего рода разветвлением другого репо.

person André    schedule 25.09.2008
comment
Безусловно — Git (или Mercurial, или другой DVCS с мостом Subversion) — гораздо лучшая идея для отслеживания восходящих репозиториев, чем сама Subversion. - person Nicholas Riley; 18.02.2010
comment
Да, обязательно используйте git-svn для клонирования проекта. Затем вы можете использовать мощные возможности перебазирования ветки git, чтобы сохранить ваши изменения в актуальном состоянии. - person hlovdal; 01.01.2014

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

Вы также можете изучить возможности чего-то вроде GIT (который может прекрасно взаимодействовать с исходным svn) для принятия частичного слияния/исправления. Чем дальше вы расходитесь, тем больше это будет проблемой. Конечно, вы можете сделать это с помощью svn и хорошего редактора, но вашу жизнь можно облегчить с помощью более гибких инструментов.

person simon    schedule 25.09.2008

Это вариант рекомендации Виско с противоположным предположением, что вы потратите большую часть времени на внесение собственных изменений и лишь изредка интегрируете свежую версию исходного исходного проекта. (Используя приведенный ниже словарь Subversion.)

  1. Создайте проект, зафиксируйте исходный код в качестве ствола. Тег.

  2. Когда вы вносите свои локальные изменения, используете ветки по мере необходимости, сливитесь обратно в ствол для выпуска и т. д.

  3. Когда есть новая версия исходного проекта, который вы хотите интегрировать:

    • make a branch for it;
    • загрузить (взломать) исходники по файлам ветки;
    • объединить ствол в ветку (потому что это может занять некоторое время, и вы не хотите ломать свой ствол);
    • затем объедините ветку обратно в ствол. Тег.

Это процесс, который я только что разработал в своей голове для собственного использования. Хотелось бы отзывов о нем.

person Bill Seitz    schedule 18.02.2010

Импортируйте дамп subversion исходного проекта и начните свой форк с собственным репозиторием в качестве ветки. По мере улучшения исходного проекта вы можете импортировать изменения, а затем вызвать «svn merge», чтобы включить эти улучшения. Пока вы и исходный проект не выполняете некоторую реструктуризацию (переименование исходных файлов, перемещение между каталогами и т. д.), слияния должны работать в основном.

person Mnementh    schedule 25.09.2008
comment
medium.com/@abeer.youssef/ - person Abeer Yosef; 10.03.2020