У меня есть два SVN-проекта из другого SVN-репозитория, использующего svn: externals .
Как я могу иметь такую же структуру макета хранилища в Git?
У меня есть два SVN-проекта из другого SVN-репозитория, использующего svn: externals .
Как я могу иметь такую же структуру макета хранилища в Git?
git submodule
теперь могу подражатьsvn:external
(с марта 2013 года).Ответы:
У Git есть два подхода, похожих, но не в точности эквивалентных svn: externals:
Поддерево слияния вставляет код внешнего проекта в отдельный подкаталог вашего репозитория. Это детализированный процесс настройки, который очень прост для других пользователей, поскольку он автоматически включается при извлечении или клонировании хранилища. Это может быть удобным способом включения зависимости в ваш проект.
Изменения легко перенести из другого проекта, но их сложно отправить обратно. И если другой проект должен объединиться из вашего кода, истории проекта объединяются, и два проекта фактически становятся одним.
Подмодули Git ( вручную ) ссылаются на определенный коммит в репозитории другого проекта, очень похоже на svn: externals с
-r
аргументом. Подмодули просты в настройке, но все пользователи должны управлять подмодулями, которые не включаются автоматически в кассы (или клоны).Несмотря на то, что легко отправить изменения обратно в другой проект, это может вызвать проблемы в случае изменения репо. Поэтому, как правило, нецелесообразно отправлять изменения обратно в проект, который находится в активной разработке.
источник
svn:externals
. В версии 1.5 синтаксис был изменен на более гибкий формат. То, что было добавлено, было относительной адресацией URL.Как я упоминал в « Обновлении новой версии подмодуля Git », вы можете добиться той же внешней функции SVN с подмодулями Git 1.8.2:
Этого достаточно, чтобы субмодуль следовал за веткой (как в последнем коммите удаленной ветви субмодуля восходящего репо ). Все, что вам нужно сделать, это:
Это обновит субмодуль.
Более подробная информация находится в
git submodule
разделе « Отслеживание последних ».Чтобы преобразовать существующий субмодуль в один отслеживающий ветвь : см. Все шаги в « Git submodules: укажите ветку / тег ».
источник
svn:externals
?--depth
но это не решает проблему.У меня есть альтернативное решение проблемы - инструмент gil (git links)
Это позволяет описывать и управлять сложными зависимостями git-репозиториев.
Также он предоставляет решение проблемы зависимости git recursive submodules .
Предположим, у вас есть следующие зависимости проекта: пример графика зависимостей репозитория git
Затем вы можете определить
.gitlinks
файл с описанием отношений с репозиториями:Каждая строка описывает git ссылку в следующем формате:
Наконец, вам нужно обновить репозиторий с корневым образцом:
В результате вы клонируете все необходимые проекты и правильно связываете их друг с другом.
Если вы хотите зафиксировать все изменения в каком-либо репозитории со всеми изменениями в дочерних связанных репозиториях, вы можете сделать это с помощью одной команды:
Команды Pull, Push работают аналогично:
Инструмент Gil (git links) поддерживает следующие команды:
Подробнее о проблеме зависимости git рекурсивных субмодулей .
источник
gil
.