2012-05-04 2 views
2

Вот моя проблема. Компания, с которой я работаю, началась с одного веб-сайта, основанного на osCommerce (задолго до того, как я пришел). Сайт рос, они начали вторую, скопировав первую и, при необходимости, изменив ее. На протяжении многих лет это продолжалось, и теперь мы имеем пять отдельных сайтов, все они основаны на одном и том же коде. Когда мы вносим изменения на один сайт, мне приходится вручную копировать эти изменения ко всему другому коду сайтов и загружать все измененные коды на каждый из сайтов.Объединение нескольких сайтов в один Git Repo

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

В любом случае, я могу объединить все эти сайты в один репо и как мне это сделать? Я также должен указать, что файлы на каждом сайте не обязательно идентичны. Один из сайтов считается приоритетным, поэтому некоторые изменения были внесены в чрезвычайные ситуации, которые не были развернуты на других сайтах, а другая - несколько иначе, чем другие 4, поэтому в некоторых местах код немного отличается. , Я понимаю, что это вызовет конфликты, но я хотел бы найти все конфликты, разрешить их, чтобы система работала по назначению и имела какие-либо изменения в зависимости от базы данных/параметров. Босс хочет развернуть по крайней мере еще 2 сайта через пару месяцев, поэтому в этот момент я действительно потеряю рассудок.

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

+0

Включение несвязанных файлов в один и тот же репозиторий, даже с общим кодом, не является хорошей идеей. У вас будет своя история объединений, ограничение доступа к некоторым репозиториям будет практически невозможным и т. Д. Самый разумный подход будет делать репо для общего кода ** и ** на каждом сайте и использовать 'git subodule' для включения общего кода на каждый сайт. В этом случае ваш общий код должен быть полностью отделен от любого конкретного сайта. – KurzedMetal

ответ

1

Если вы хотите объединить их вместе, вам придется отказаться от истории изменений для некоторых версий.

  1. Выберите одну версию в качестве отправной точки.
  2. Создайте клон этого репозитория версий для каждой версии вашего сайта, включая оригинал.
  3. Удалить содержимое каждого клона, но оставить папку .git неповрежденной.
  4. Скопируйте содержимое каждой версии (исключая .git) в соответствующую копию.
  5. Commit

Это оставит вас с ответвлением для каждой версии сайта, а также мастер-отрасли для общих изменений. У каждой ветви теперь будет общий предок.

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

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

+0

Спасибо, Майк! Это на самом деле намного проще, чем я ожидал, и делает удивительный смысл этому Git n00b. Потеря истории пересмотра не имеет большого значения, потому что у них почти все одинаковые истории. – nathangiesbrecht

+0

@nathangiesbrecht, не забудьте, вам нужно будет вручную добавить файлы, которые не существуют в исходной ветке. – mikerobi

Смежные вопросы