- PVSM.RU - https://www.pvsm.ru -
Часто бывает так, что у разработчика со-временем накапливается некоторая коллекция кода который он использует в своих проектах.
Одни скрипты он использует в одних проектах, другие в других.
Эти скрипты со-временем совершенствуются, убираются баги, оптимизируются. Поэтому появляется вопрос, как синхронизировать новые версии скриптов с теми, которые в проектах.
Тут есть несколько вариантов:
Первый вариант:
Создать один репозиторий и поместить туда все скрипты. Затем этот репозиторий подключается как подмодуль к проекту и используется.
Минусы:
Второй вариант:
Каждый скрипт отдельно хранить на Github gist и подключать нужные как подмодули
Минус тот-же, что и в первом варианте во втором пункте.
Третий вариант:
Использовать Git Subtree.
(Данное решение является альтернативой для Git submodules)
Git subtree — ещё один из методов слияния веток. Его идея состоит в том, что имея две ветки, git будет понимать, что одна ветка — это не разновидность другой, а дополнение.
Общая суть идеи:
Теперь подробности с использованием Git-extensions.
1) Публикуем наш файл с кодом на https://gist.github.com [1] где сразу можем получить ссылку на «мини»-репозиторий:
Открываем репозиторий нашего проекта в GitExtensions и выбираем:
[Repository] -> [Remote repositories...]
Подключаем как отдельную ветку.
Для этого нажимаем [+]. Вводим [Name], [Url] и сохраняем [Save changes]:
$git remote add "Util1" "https://gist.github.com/cf056e792d3bd9c2fc5973b846efe3d3.git"
Видим, что подключились к удаленному репозиторию.
Далее нам нужно связать эту ветку с определенной папкой в нашем проекте, чтобы файл копировался туда.
Для этого открываем Git-bash(ctrl+G) и выполняем команду:
$git read-tree --prefix=Client/Assets/ -u Util1/master
где:
Client/Assets/ — путь к папке в которую будет копироваться файл
Util1/master — имя ветки удаленного репозитория
(через UI не нашел способа)
Gist-ветка становится привязана к нашей папке в проекте. И файл уже там.
Теперь можем работать как с обычной веткой.
Например если в Gist файл изменяется, мы может получить новую версию:
Делаем Fetch All и видим все изменения:
$git fetch --progress "--all"
Затем делаем слияние, чтобы залить изменения в нашу ветку:
$git merge --no-ff --allow-unrelated-histories Util1/master
Результат:
Дополнительная информация:
https://git-scm.com/book/ru/v1/Инструменты-Git-Слияение-поддеревьев [2]
https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree [3]
https://www.nwcadence.com/blog/git-subtrees [4]
Автор: Глебов Евгений
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/git/288974
Ссылки в тексте:
[1] https://gist.github.com: https://gist.github.com
[2] https://git-scm.com/book/ru/v1/Инструменты-Git-Слияение-поддеревьев: https://git-scm.com/book/ru/v1/Инструменты-Git-Слияение-поддеревьев
[3] https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree: https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree
[4] https://www.nwcadence.com/blog/git-subtrees: https://www.nwcadence.com/blog/git-subtrees
[5] Источник: https://habr.com/post/419925/?utm_source=habrahabr&utm_medium=rss&utm_campaign=419925
Нажмите здесь для печати.