Каков текущий способ удаления подмодуля git?
Начиная с git версии 1.9.3 (Apple Git-50) на Mac, как удалить подмодуль git? Я читаю много устаревшей информации, и многие разработчики говорят мне, что они не будут работать. Каков текущий путь? будут git deinit pathToSubModule
сделать трюк?
Шаги, которые я думал, будут работать, но комментарии говорят, что они не будут.
Позвольте мне объяснить мою текущую ситуацию и что мне нужно сделать. Я установил Quick-репозиторий и добавил его в качестве субмодуля в свой проект. Этот код уже зарегистрирован, и другие используют его. Теперь мне нужно создать тот же Quick-репозиторий и разместить его на более безопасном github, который есть у моей компании (то есть на совершенно другом частном github). После разветвления я хочу добавить этот форк как gitSubmodule и позволить ему заменить текущий Quick-подмодуль, который я установил ранее.
Обновление: я прочитал, что следующее - это правильный путь в последней версии git, пожалуйста, подтвердите?
To remove a submodule added using:
git submodule add blah@blah.com:repos/blah.git lib/blah
Run:
git rm lib/blah
That's it.
For old versions of git (circa ~1.8.5) use:
git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah
3 ответа
У тебя есть git submodule deinit
git submodule deinit <asubmodule>
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>
deinit
Отменить регистрацию данных подмодулей, т.е. удалить весь
submodule.$name
раздел из.git/config
вместе с их рабочим деревом.Дальнейшие звонки
git submodule update
,git submodule foreach
а такжеgit submodule sync
пропустит любые незарегистрированные субмодули, пока они не будут инициализированы снова, поэтому используйте эту команду, если вы не хотите больше локально извлекать субмодуль в вашем рабочем дереве.Если вы действительно хотите удалить подмодуль из репозитория и зафиксировать это использование
git rm
вместо.Если
--force
указано, рабочее дерево подмодуля будет удалено, даже если оно содержит локальные изменения.
Я использую Git версии 2.16.2 и git rm
делает работу в основном хорошо:
git rm path-to-submodule
Вы можете проверить с помощью git status
а также git diff --cached
что это деинициализирует подмодуль и модифицирует .gitmodules
автоматически. Как всегда, вам нужно совершить изменение.
Тем не менее, даже если субмодуль удален из системы контроля версий, .git/modules/path-to-submodule
по-прежнему содержит хранилище субмодулей и .git/config
содержит его URL, так что вам все равно придется удалить их вручную:
git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule
Хранение подмодульного хранилища и конфигурации является преднамеренным, так что вы можете отменить удаление, например, git reset --hard
,
Как безопасно удалить субмодуль.
(добавляет на /questions/14522002/kak-mne-udalit-podmodul/14522029#14522029)
Перечислите и найдите раздел субмодулей в
.gitmodules
файл. Скажи через терминалvi .gitmodules
, Пример:[submodule "submodules/afnetworking"] path = submodules/afnetworking url = https://github.com/CompanyName/afnetworking.git
Подмодули могут использоваться с локальными вилками. Для долгосрочных проектов код может отличаться от исходного репозитория и может содержать некоторые исправления. Хорошая идея проверить, претерпел ли код подмодуля изменения в течение проекта. Пример: посмотрите журналы, если они указывают на
master
филиал или какой-то местный филиал. изучение журналов git для поиска изменений, которые были сделаны через терминал. как правило, они хранятся в каталоге, мой пример, подsubmodules
каталог.User$ cd submodules/afnetworking User$ git log
Удалите раздел подмодулей из.gitmodules, сохраните файл. Пример:
git status
должен отображать только следующие измененияmodified: .gitmodules
Поставьте изменения с
git add .gitmodules
,Перечислите и найдите раздел субмодулей в
.git/config
файлы. Скажи через терминалvi .git/config
, Пример:[submodule "submodules/afnetworking"] url = https://github.com/CompanyName/afnetworking.git
Удалите файлы git cache sobmodule. Бег
git rm --cached submodules/afnetworking
(без косой черты) удалит его успешно. Пример:User$ git rm --cached submodules/afnetworking rm 'submodules/afnetworking' <-- terminal output
Удалить файлы субмодулей в
.git
каталог сrm -rf .git/modules/...
, Подтвердите это с помощьюgit status
после этого.User$ rm -rf .git/modules/submodules/afnetworking/ User$ git status On branch feature/replace-afnetworking-submodule-with-pod Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: .gitmodules deleted: submodules/afnetworking Untracked files: (use "git add <file>..." to include in what will be committed) submodules/afnetworking/
Зафиксируйте изменения. Подтвердите с помощью
git status
после этого.User$ git commit -m "Remove submodule afnetworking" [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking 2 files changed, 4 deletions(-) delete mode 160000 submodules/afnetworking User$ git status On branch feature/replace-afnetworking-submodule-with-pod Untracked files: (use "git add <file>..." to include in what will be committed) submodules/afnetworking/ nothing added to commit but untracked files present (use "git add" to track)
Удалите неотслеживаемые файлы субмодулей.
User$ rm -rf submodules/afnetworking
Удалить ссылки из проекта Xcode. Сборка, исправление проблем компиляции и выполнения.