Репозиторий Git

Проект git-субрепо существует уже довольно давно, но упоминаний о ней несправедливо мало.

К git-субрепо является Инги дот Нет .

Если посмотреть историю коммитов основной ветки проекта, может показаться, что проект прекратил развитие 2 года назад. Однако работа над проектом ведется и хотелось бы надеяться, что скоро выйдет версия.

0.4.0 .

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

git-субрепо до тех пор, пока пользователь не решит зафиксировать исходный репозиторий подпроектов.

Кроме того, пользователь получает полностью готовое и настроенное дерево исходного кода в момент копирования основного репозитория стандартной командой git-клон(1) .

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

  • Необходимо ли хранить полную историю подпроекта в основном репозитории или достаточно сжатых коммитов?
  • можно ли доставлять изменения из подпроекта в вышестоящий репозиторий поддерева;
  • есть ли необходимость подключать фиксированные теги вышестоящего репозитория подпроекта или достаточно возможности подключения ветвей?
  • нужно ли в дальнейшем удалять как сами подпроекты, так и ставшую ненужной часть истории этих подпроектов;
  • придется ли пользователю предпринимать какие-либо действия по ручной настройке подпроектов после клонирования репозитория основного проекта;
  • Насколько трудоемким будет вопрос анализа истории подключения подпроектов и конкретных редакций, из которых берет свое начало подпроект;
  • как тот или иной инструмент повлияет на политику управления конфигурацией (Source Configuration Management) и насколько этот инструмент усложнит повседневную работу инженеров.

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



Установка 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.