Знаете ли вы, как удалить подмодуль в git

· На чтение уйдёт 2 минуты · (225 слов)

Есть такая система контроля версий (VCS) – git. Такая хорошая, добротная, модная – молодёжная! Сейчас как бы модно на неё проекты переводить. Даже внешние репозитарии, вроде, по уму сделаны (ну, это я до сего дня так думал).

Случилось страшное: пришлось мне по нужде великой удалить один из submodules в репозитарии kohana-universe (сборище мусора и не только для фреймворка kohana). Том, который phpclub делали-делали, да забили, конечно. Короче, пришлось теперь самому выкорчёвывать оттуда модуль cache2.

Казалось бы, что может быть проще – раз добавляем субмодуль командой git submodule add, значит удалять надо командой git submodule del. Однако – хрен! А быть может, git submodule remove? Однако, ещё один хрен, итого два.

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

Оказывается, для того, чтобы удалить submodule, необходимо выполнить три интуитивно простых и понятных действия:

  1. Открыть файл .git/config и удалить оттуда секцию с упоминанием о ненужном submodule
  2. Открыть файл .gitmodules и выкорчевать оттуда этот треклятый submodule
  3. И наконец, выполнить интуитивно понятную команду
    git rm --cached modules/cache2

К слову, ненавистником git я не являюсь и мне эта система контроля версий также очень нравится. Примерно так же, как subversion. Но с некоторых вещей, типа git remote add upstream git://url, хочется выть. Всё такое “интуитивно понятное”, куда уж тут сраному svn’у, который учится (и запоминается) за 10 минут. В общем, отличная идея во многом задушена неинтуитивной реализацией.

Полезное