Каков текущий способ удаления подмодуля git?


начиная с версии git 1.9.3 (Apple Git-50) на mac как удалить подмодуль git? Я читаю много устаревшей информации со многими разработчиками, которые говорят мне, что они не будут работать. Что сейчас ? будет git deinit pathToSubModule делать трюк ?

шаги, которые я думал, будут работать здесь но комментарии говорят, что они не.

позвольте мне объяснить мою текущую ситуацию и то, что мне нужно сделать. Я установил быстрый репозиторий и добавил его в качестве подмодуль к моему проекту. Этот код уже зарегистрирован, и другие используют его. Что мне сейчас нужно сделать, это вилки тот же быстрый репозиторий и разместить его на более безопасном github, что моя компания имеет (так что совершенно другой частный github). После разветвления я хочу добавить эту вилку в качестве gitSubmodule и позволить ей заменить текущий быстрый подмодуль, который я установил ранее.

обновление: я прочитал, что следующий правильный путь на последней версии 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 78

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 будет пропустить любые незарегистрированные подмодули, пока они не будут инициализированы снова, поэтому используйте эту команду, если вы не хотите чтобы иметь локальную проверку подмодуля в вашем рабочем дереве больше.

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

если --force указано, что дерево работы подмодуля будет удалено, даже если оно содержит локальные изменения.

как безопасно удалить субмодуль.

(добавляет к https://stackoverflow.com/a/1260982/342794)

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

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

    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. удалите файлы подмодулей в разделе С 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. Сборка, исправление компиляции и проблем во время выполнения.

Я использую 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.