У меня есть два SVN-проекта из другого репозитория SVN, использующего svn: externals.
Как я могу иметь такую же структуру макета хранилища в Git?
У меня есть два SVN-проекта из другого репозитория SVN, использующего svn: externals.
Как я могу иметь такую же структуру макета хранилища в Git?
Git имеет два подхода, аналогичные, но не точно эквивалентные svn: externals:
Subtree merges вставляет внешний код проекта в отдельный подкаталог вашего репо. У этого есть подробный процесс настройки, а затем он очень прост для других пользователей, поскольку он автоматически включается, когда репозиторий проверен или клонирован. Это может быть удобным способом включения зависимости в ваш проект.
Легко вытащить изменения из другого проекта, но сложно представить изменения обратно. И если другой проект должен слиться с вашим кодом, истории проектов объединяются, и оба проекта эффективно становятся одним из них.
Git подмодули (manual) ссылаются на конкретную фиксацию в другом репозитории проекта, как и svn: externals с аргументом -r
. Субмодули просты в настройке, но все пользователи должны управлять подмодулями, которые не включаются автоматически в кассы (или клоны).
Несмотря на то, что легко вернуть изменения в другой проект, это может вызвать проблемы, если репо изменилось. Поэтому, как правило, нецелесообразно передавать изменения обратно в проект, который находится в активной разработке.
Как я упоминал в "Git обновлении новой версии подмодуля", вы можете достичь того же SVN внешняя функция с подмодулями Git 1.8.2:
Git config -f.gitmodules subodule. <path>.branch <branch>
Код>
Этого достаточно, чтобы подмодуль следовал ветке (как в LATEST-фиксации удаленной ветки субмодуля upstream repo). Все, что вам нужно сделать, это:
Git Обновление подмодуля --remote
Код>
Это обновит подмодуль.
Подробнее см. Git подмодуль
отслеживание последних ".
Чтобы преобразовать существующий подмодуль в одно отслеживание ветки: см. все шаги в разделе Git подмодули: укажите ветку/тег ".
Вы должны изучить Git подмодули. Это должно позволить почти точно, что вы ищете.
Нет точного аналога, но вот пара обходных решений:
Для последней версии Git я бы предложил прочитать Git subodules в официальной документации Git.
У меня просто есть альтернативное решение проблемы - инструмент gil (git links)
Это позволяет описывать и управлять сложными зависимостями git-репозиториев.
Также он предоставляет решение проблемы зависимости git recursive submodules.