Проект git-субрепо существует уже довольно давно, но упоминаний о ней несправедливо мало.
К git-субрепо является Инги дот Нет .
Если посмотреть историю коммитов основной ветки проекта, может показаться, что проект прекратил развитие 2 года назад. Однако работа над проектом ведется и хотелось бы надеяться, что скоро выйдет версия.
0.4.0 .
Важным свойством этого инструмента является отсутствие необходимости установки на стороне пользователя.
git-субрепо до тех пор, пока пользователь не решит зафиксировать исходный репозиторий подпроектов.
Кроме того, пользователь получает полностью готовое и настроенное дерево исходного кода в момент копирования основного репозитория стандартной командой git-клон(1) .
При выборе средств поддержки подмодулей/поддеревьев/подпроектов основного репозитория контейнеров разработчик в первую очередь определяет круг возможностей, которые предоставляет тот или иной механизм, и дает ответы на следующие вопросы:
- Необходимо ли хранить полную историю подпроекта в основном репозитории или достаточно сжатых коммитов?
- можно ли доставлять изменения из подпроекта в вышестоящий репозиторий поддерева;
- есть ли необходимость подключать фиксированные теги вышестоящего репозитория подпроекта или достаточно возможности подключения ветвей?
- нужно ли в дальнейшем удалять как сами подпроекты, так и ставшую ненужной часть истории этих подпроектов;
- придется ли пользователю предпринимать какие-либо действия по ручной настройке подпроектов после клонирования репозитория основного проекта;
- Насколько трудоемким будет вопрос анализа истории подключения подпроектов и конкретных редакций, из которых берет свое начало подпроект;
- как тот или иной инструмент повлияет на политику управления конфигурацией (Source Configuration Management) и насколько этот инструмент усложнит повседневную работу инженеров.
Установка git-subrepo
Полиэтиленовый пакет git-субрепо , на стороне разработчика, может быть установлен как локально, в ваш домашний каталог, так и на уровне системы.В первом случае достаточно клонировать репозиторий git-субрепо в нужный каталог, например, ~/бин :
и настройте переменные средыbash-4.4$ cd ~/bin bash-4.4$ git clone https://github.com/ingydotnet/git-subrepo.git
bash-4.4$ vim subrepo-env.sh
#!/bin/sh
export GIT_SUBREPO_ROOT="/home/username/bin/git-subrepo"
export PATH="/home/username/bin/git-subrepo/lib:$PATH"
export MANPATH="/home/username/bin/git-subrepo/man:$MANPATH"
:wq
bash-4.4$ source .
/subrepo-env.sh
Если вы посмотрите на переменные, определенные в Makefile git-субрепо :
# Install variables:
PREFIX ?= /usr/local
INSTALL_LIB ?= $(DESTDIR)$(shell git --exec-path)
INSTALL_EXT ?= $(INSTALL_LIB)/$(NAME).
d
INSTALL_MAN1 ?= $(DESTDIR)$(PREFIX)/share/man/man1
тогда легко узнать, что находится на системном уровне git-субрепо установлен в каталог, где он находится Гит :
bash-4.4$
bash-4.4$ git --exec-path
/usr/libexec/git-core
bash-4.4$
Таким образом, команда для установки git-субрепо может выглядеть так, например:
bash-4.4$ make PREFIX=/usr install
Наличие переменной РУКИ ВВЕРХ позволяет без дополнительных усилий создать пакет для любого дистрибутива (конечно, если мы не находимся в кросс-среде) Линукс , что может быть полезно для DevOps-инженеров.
Установка git-субрепо как суперпользователь: bash-4.4$
bash-4.4$ cd git-subrepo/
bash-4.4$ make PREFIX=/usr install
install -C -d -m 0755 /usr/libexec/git-core/
install -C -m 0755 lib/git-subrepo /usr/libexec/git-core/
install -C -d -m 0755 /usr/libexec/git-core/git-subrepo.d/
install -C -m 0755 lib/git-subrepo.d/help-functions.bash lib/git-subrepo.d/bash+.
bash /usr/libexec/git-core/git-subrepo.d/
install -C -d -m 0755 /usr/share/man/man1/
install -C -m 0644 man/man1/git-subrepo.1 /usr/share/man/man1/
bash-4.4$
Чтобы проанализировать возможности git-субрепо нам понадобится простая тестовая среда, в которой мы сможем воспроизвести стандартные сценарии работы.
Тестовая среда
Давайте создадим три каталога владелец , удаленный , пользователь , в котором мы разместим модели вышестоящего и локального репозиториев разработчика и пользователя.
bash-4.4$ vim _init.sh
#!/bin/sh
CWD=`pwd`
mkdir remote owner user
cd remote
git init --bare build-system.git
git init --bare platform.git
cd .
/owner git clone $CWD/remote/build-system.git git clone $CWD/remote/platform.git cd build-system echo -e "\n[master] build-system 1.0.0\n" >README git add README git commit -m "init build-system master 1.0.0" git push cd .
/platform echo -e "\n[master] platform 1.0.0\n" >README git add README git commit -m "init platform master 1.0.0" git push cd .
/.
/user git clone $CWD/remote/build-system.git git clone $CWD/remote/platform.git cd $CWD :wq bash-4.4$ bash-4.4$ .
/_init.sh
bash-4.4$
Здесь,
владелец | — | рабочий каталог автора проекта; |
удаленный | — | каталог, представляющий сервер автора проекта, на котором расположены вышестоящие репозитории основного проекта платформа.
git и подпроект сборка-system.git ; |
пользователь | — | Рабочий каталог пользователя или члена группы разработчиков.
|
владелец И пользователь соответственно.
Задача автора - включить подпроект встроенная система к главному дереву Платформа предоставить пользователям и участникам проекта следующие возможности:
- клонировать основной репозиторий с включенным в него подпроектом система сборки без необходимости беспокоиться о настройке версий или редакций.
То есть каждая ветка репозитория Платформа должен соответствовать конкретной ревизии конкретной ветки репозитория система сборки и пользователь должен получить настроенное дерево исходных кодов за одну операцию git-клон(1) , без каких-либо дополнительных действий.
- доставьте ваши изменения в вышестоящий репозиторий проекта, как основной, так и вспомогательный.
- получать изменения, внесенные другими участниками или пользователями проекта, конечно, при наличии у них соответствующих прав.
Подключение подпроекта
Для подключения нового поддерева используйте команду клон субрепозитория git , которая по своему назначению аналогична команде git-клон(1) .Обязательный параметр команды: URL-адрес удаленный репозиторий.
Также вы можете указать директорию, в которой будет находиться подпроект и ветка удаленного репозитория.
Мы будем работать с главными ветвями, поэтому в нашем примере мы опускаем ненужные параметры команды.
Итак, автор проекта на своей рабочей машине может подключить подпроект система сборки используя команду git subrepo clone .
/.
/remote/build-system.git/build-system : bash-4.4$
bash-4.4$ cd owner/platform/
bash-4.4$ git subrepo clone .
/.
/remote/build-system.git/ build-system Subrepo '.
/.
/remote/build-system.git' (master) cloned into 'build-system'.
bash-4.4$
Давайте посмотрим, какие изменения произошли в локальном репозитории Платформа : bash-4.4$
bash-4.4$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
bash-4.4$
bash-4.4$
bash-4.4$ git subrepo status
1 subrepo:
Git subrepo 'build-system':
Remote URL: .
/.
/remote/build-system.git
Upstream Ref: b2f5079
Tracking Branch: master
Pulled Commit: b2f5079
Pull Parent: b5e76a7
bash-4.4$
История подпроекта система сборки не передается в основное дерево, у нас есть только один сжатый коммит, сопровождаемый справочной информацией.
Эта информация находится под контролем версий в файле .
/build-system/.
gitrepo/config : [subrepo]
Теги: #git #github #Системы контроля версий #git-subtree #git-subrepo
-
Php-Перенаправление
19 Oct, 24 -
Компании Ит-Поддержки
19 Oct, 24 -
Врачи Без Границ
19 Oct, 24 -
Xcp Для Тех, Кто Хочет, Но Боится
19 Oct, 24 -
Иммиграция Фрилансера: Что Нужно Знать
19 Oct, 24 -
Map/Reduce И Многое-Многое Другое :-)
19 Oct, 24 -
Биткойн И Денежные Переводы
19 Oct, 24 -
И Снова О Стакснете
19 Oct, 24