Можно ли создать проект, который будет предшественником существующих проектов? Какой-то предварительный проект? - PullRequest
2 голосов
/ 23 мая 2019

Я работаю в отделе архитектуры переднего плана, и мы поддерживаем несколько скелетных проектов.В них мы определяем основы, которые другие команды используют для запуска своих собственных проектов.Мы создаем некоторый код для запуска devserver веб-пакета с babel;мы настраиваем автоматизированные тесты, используя testem, chai и mocha;мы создаем сценарии, которые помогают генерировать некоторые файлы конфигурации.Все это кажется классным, но есть один недостаток: проекты, созданные из наших скелетов, не разветвляются от них, они клонируют репозиторий скелета, а затем переносят свой новый проект в другое репо.

Каждое изменение в нашем скелетепроекты будут влиять только на будущие проекты, потому что старые проекты не получают изменения автоматически, и они даже не делают это вручную (это то, что мы в настоящее время пытаемся применить).

Итак, это будетзамечательно иметь такую ​​структуру:

basic-skeleton
|--amp-skeleton
|  |--amp-project-1
|  |--amp-project-2
|--react-skeleton
   |--react-project-1

Можно ли создать эти "ветвления" после создания проектов, чтобы мы обновляли родительские проекты, а они простодолжны объединить эти изменения?

1 Ответ

2 голосов
/ 23 мая 2019

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

Но это разветвляется.

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

Операция «разветвления» GitHub, GitLab, BitBucket и им подобных - это просто клон на стороне сервера. Если они сделали клонирование вручную, менеджер хранилища не будет знать, что он может выполнить слияние, поэтому им, возможно, придется делать это и вручную, но ничто не мешает ему.


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


Обновление:

Но я узнал, что на самом деле новые проекты не создаются таким образом, и поэтому они не являются форками.

Есть еще способ обойти это. Он часто используется специалистами по сопровождению пакетов (например, в Debian) для отслеживания изменений из вышедших выпусков, которые имеют версии в разных или непубличных системах контроля версий. Он работает, поддерживая ветвь «вверх по течению»:

Первоначальный импорт в репозиторий проекта (в нисходящем направлении) является прямой копией некоторой ревизии скелета (в восходящем направлении), а затем в нее вносятся изменения. Когда пришло время слиться с более новым скелетом (восходящим), создается новая ветвь (upstream), в нее копируется и фиксируется более новая версия скелета. Эта ветвь затем объединяется в master, чтобы ввести более новый скелет.

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

Этот рабочий процесс использовался еще до Git и был там еще важнее, потому что централизованные системы не могут реплицировать историю между репозиториями, как распределенные. Он даже описан в руководстве CVS как «ветви поставщиков». Это также явно один из сценариев использования дизайна для Git, и важная причина, почему Git угадывает переименования во время слияния, а не отслеживания идентичности файла - потому что при импорте tarred / zip-релиза в ветку поставщика у вас нет информации о переименовании .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...