Поиск…
Добавление подмодуля
Вы можете включить другой репозиторий Git в качестве папки в вашем проекте, отслеживаемой Git:
$ git submodule add https://github.com/jquery/jquery.git
Вы должны добавить и зафиксировать новый файл .gitmodules
; это говорит Git, какие подмодули должны быть клонированы при запуске git submodule update
.
Клонирование хранилища Git с подмодулями
Когда вы клонируете репозиторий, который использует подмодули, вам нужно будет инициализировать и обновить их.
$ git clone --recursive https://github.com/username/repo.git
Это будет клонировать упомянутые подмодули и помещать их в соответствующие папки (включая подмодули внутри подмодулей). Это эквивалентно запуску git submodule update --init --recursive
сразу же после завершения клонирования.
Обновление подмодуля
Подмодуль ссылается на конкретную фиксацию в другом репозитории. Чтобы проверить точное состояние, на которое ссылаются все подмодули, запустите
git submodule update --recursive
Иногда вместо использования состояния, на которое вы ссылаетесь, вы хотите обновить локальную проверку до последнего состояния этого субмодуля на удаленном компьютере. Чтобы проверить все подмодули в последнем состоянии на пульте дистанционного управления с помощью одной команды, вы можете использовать
git submodule foreach git pull <remote> <branch>
или используйте аргументы git pull
по умолчанию
git submodule foreach git pull
Обратите внимание, что это просто обновит вашу локальную рабочую копию. Запуск git status
будет отображать каталог подмодулей как грязный, если он изменится из-за этой команды. Чтобы обновить репозиторий вместо ссылки на новое состояние, вы должны зафиксировать изменения:
git add <submodule_directory>
git commit
Могут быть некоторые изменения, которые у вас есть, которые могут иметь конфликт слияния, если вы используете git pull
чтобы вы могли использовать git pull --rebase
для перемотки ваших изменений вверх, большую часть времени это уменьшает вероятность конфликта. Также он тянет все ветви на локальные.
git submodule foreach git pull --rebase
Чтобы проверить последнее состояние конкретного подмодуля, вы можете использовать:
git submodule update --remote <submodule_directory>
Установка подмодуля для следования ветви
Подмодуль всегда извлекается при определенном коммите SHA1 («gitlink», специальная запись в индексе родительского репо)
Но можно запросить обновление этого подмодуля до последней фиксации ветви субмодуля удаленного репо.
Вместо того, чтобы идти в каждом подмодуле, выполняя git checkout abranch --track origin/abranch, git pull
, вы можете просто сделать (из родительского репо) a:
git submodule update --remote --recursive
Поскольку SHA1 подмодуля изменится, вам все равно нужно следовать этому:
git add .
git commit -m "update submodules"
Это предполагает, что подмодули были:
либо добавлено с веткой, чтобы следовать:
git submodule -b abranch -- /url/of/submodule/repo
или настроить (для существующего подмодуля), чтобы следовать за веткой:
cd /path/to/parent/repo git config -f .gitmodules submodule.asubmodule.branch abranch
Удаление подмодуля
Вы можете удалить подмодуль (например, the_submodule
), вызвав:
$ git submodule deinit the_submodule
$ git rm the_submodule
git submodule deinit the_submodule
удаляетthe_submodule
s 'из .git / config. Это исключает the_submodule изgit submodule update
,git submodule sync
иgit submodule foreach
вызовов и удаляет его локальный контент (источник) . Кроме того, это не будет отображаться как изменение в родительском репозитории.git submodule init
иgit submodule update
восстановит подмодуль, опять же без изменений в родительском репозитории.git rm the_submodule
удалит подмодуль из дерева работ. Файлы исчезнут, а также запись подмодулей в файле.gitmodules
(источник) . Если толькоgit rm the_submodule
(без предварительногоgit submodule deinit the_submodule
выполняется, однако, запись подмодулей в вашем файле .git / config останется.
Взято отсюда :
- Удалите соответствующий раздел из файла
.gitmodules
. - Этап изменения
.gitmodules
git add .gitmodules
- Удалите соответствующий раздел из
.git/config
. - Запустить
git rm --cached path_to_submodule
(без косой черты). - Запустить
rm -rf .git/modules/path_to_submodule
- Commit
git commit -m "Removed submodule <name>"
- Удалите теперь необработанные файлы подмодулей
-
rm -rf path_to_submodule
Перемещение подмодуля
Бежать:
$ git mv old/path/to/module new/path/to/module
1,8 Измените .gitmodules
и соответствующим образом измените путь подмодуля и поместите его в индекс с помощью git add .gitmodules
.
При необходимости создайте родительский каталог нового местоположения подмодуля ( mkdir -p new/path/to
).
Переместите весь контент из старого в новый каталог ( mv -vi old/path/to/module new/path/to/submodule
).
Убедитесь, что Git отслеживает этот каталог ( git add new/path /to
).
Удалите старый каталог с git rm --cached old/path/to/module
.
Переместите каталог .git/modules/ old/path/to/module
со всем содержимым в .git/modules/ new/path/to/module
.
Отредактируйте файл .git/modules/ new/path/to /config
, убедитесь, что элемент worktree указывает на новые местоположения, поэтому в этом примере это должно быть worktree = ../../../../../ old/path/to/module
. Как правило, должно быть еще два ..
затем каталоги на прямом пути в этом месте. , Отредактируйте файл new/path/to/module /.git
, убедитесь, что путь в нем указывает на правильное новое местоположение внутри основной папки проекта .git
, поэтому в этом примере gitdir: ../../../.git/modules/ new/path/to/module
.
Выход git status
выглядит следующим образом:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: .gitmodules
# renamed: old/path/to/submodule -> new/path/to/submodule
#
Наконец, зафиксируйте изменения.
Этот пример из Stack Overflow , Axel Beckert
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow