Каков текущий способ удаления подмодуля 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)

  1. Перечислите и найдите раздел субмодулей в .gitmodules файл. Скажи через терминал vi .gitmodules, Пример:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  2. Подмодули могут использоваться с локальными вилками. Для долгосрочных проектов код может отличаться от исходного репозитория и может содержать некоторые исправления. Хорошая идея проверить, претерпел ли код подмодуля изменения в течение проекта. Пример: посмотрите журналы, если они указывают на master филиал или какой-то местный филиал. изучение журналов git для поиска изменений, которые были сделаны через терминал. как правило, они хранятся в каталоге, мой пример, под submodules каталог.

    User$ cd submodules/afnetworking
    User$ git log
    
  3. Удалите раздел подмодулей из.gitmodules, сохраните файл. Пример: git status должен отображать только следующие изменения

    modified:   .gitmodules
    
  4. Поставьте изменения с git add .gitmodules,

  5. Перечислите и найдите раздел субмодулей в .git/config файлы. Скажи через терминал vi .git/config, Пример:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. Удалите файлы git cache sobmodule. Бег git rm --cached submodules/afnetworking (без косой черты) удалит его успешно. Пример:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. Удалить файлы субмодулей в .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/
    
  8. Зафиксируйте изменения. Подтвердите с помощью 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)
    
  9. Удалите неотслеживаемые файлы субмодулей.

    User$ rm -rf submodules/afnetworking
    
  10. Удалить ссылки из проекта Xcode. Сборка, исправление проблем компиляции и выполнения.

Другие вопросы по тегам