Создание репозитория и работа с субмодулями

Категория: Заметки | Скилл: git | Дата: 16.05.2020
В прошлый раз разбирали проблему detached HEAD, а теперь вернемся немного назад, к моменту начала работы с репозиториями (создание, клонирование). В статье рассмотрено 2 вида начала работы с репозиторием, при этом я постарался охватить создание пустого репозитория, и случай когда необходимо клонировать уже существующий (в котором много-много всего).

Недавно потребовалось в очередной раз поработать с git, встретил несколько незнакомых моментов. Вспомнил что у меня была статья на старой версии этого сайта. Нашел. Теперь она представлена здесь в ином виде, с новым опытом :)

В тексте ниже часто употребяется <url>, это адрес удаленного репозитория (расположенного на сервере), например https://dev.ds-servers.com/sip/engine.git

Клонирование и субмодули

Можно создать репозиторий в аккаунте хостинга, затем клонировать его себе. После чего вставить нужные файлы в директорию репозитория и закоммитить изменения. Стоит заметить, что после клонирования, в директории где вызвана командная строка, будет создана директория с именем репозитория, надо в нее перейти (cd название директории, в примере ниже <dir> заменить на название) прежде чем осуществлять действия.

git clone <url>
cd <dir>
git add .
git commit -m 'init repository'
git push

Однако, в репозитории могут быть субмодули, это тоже репозитории, которые являются зависимостями целевого репозитория. Вложенность субмодулей может быть глубокая (субмодули субмодулей и т.д.), а при простом клонировании (git clone <url>) происходит клонирование только указанного в url репозитория, без клонирования субмодулей. Чтобы клонировать репозиторий и все субмодули необходимо:

git clone --recursive <url>
Чтобы обновить все субмодули репозитория можно сделать так:
git submodule update --recursive --remote

Инициализировать и/или обновить все субмодули репозитория за одну команду:

git submodule update --init --recursive

Добавить субмодуль в репозиторий (url - адрес для клонирования репозитория с сервера, path - путь относительно текущего каталога где будет располагаться субмодуль):

git submodule add <url> <path>

Вариантов удаления субмодулей через командную строку мне не удалось найти, поэтому пришлось руками удалить субмодуль из репозитория:

  • удалить информацию о субмодуле из .gitmodules и .git/config (секции вида submodule )
  • удалить директорию субмодуля
  • закомитить изменения

Создание локального репозитория и синхронизация с удаленным

Для начала нужно создать полностью пустой репозиторий на аккаунте хостинга. Затем инициализировать локальный репозиторий (выбрать директорию на диске где будет хранилище локального репозитория):

git init

Затем надо добавить все файлы в репозиторий и закоммититься:

git add .
git commit -m 'init repository'

Теперь нужно добавить удаленный репозиторий (на аккаунте хостинга):

git remote add origin <url>

Результат добавления можно посмотреть при помощи команды:

git remote -v

Должно быть что-то типа:

origin <url> (fetch)
origin <url> (push)

Затем нужно перенести все изменения на удаленный репозиторий так:

git push -u <url> master

При помощи git status можно узнать о текущем статусе локального репозитория.

UPDATE Совсем недавно создавал репозиторий на хостинге под управлением GitLab, где мне была предложена следующая последовательсноть команд:
git init
git remote add origin <url>
git add .
git commit -m "Initial commit"
git push -u origin master
Я Виталий, ник в сети Byurrer.
Увлекаюсь программированием, веду интересные проекты, пишу здесь об интересующих меня вещах: о работе, проектах, увлечениях и проффесиональном развитии.

Скилы
php, c++, javascript, sql, hlsl, html, css
Проекты
SkyXEngine, PHP-API, S4G
Категории
В разработке :)
Популярное
В разработке :)