Удалить подмодуль git из определенной ветки - PullRequest
0 голосов
/ 15 сентября 2018

Я в процессе портирования своего приложения JS на современные модули E6.Мое приложение хранится в git-репо.В репо есть подмодуль.

Я создал другую ветку, чтобы делать то, что мне нужно, но я хотел бы удалить подмодуль в этой конкретной ветке.

Причина в том, что у меня естьnpm install приложению в подмодуле как к пакету, вместо того чтобы использовать его «классическим подмодулем», как я делаю в основной ветке.

Чтение этого ответа Я думал, что это будеттак же просто, как оформить заказ в новой ветке, измените файл .gitmodules, исключая подмодуль и удалив саму папку подмодуля.

Однако, когда я делаю это, я извлекаю мастер, и кажется, что субмодуль отсутствуеттакже, и это было бы огромной ошибкой.Я не ставил изменения перед проверкой, если это важно.

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

РЕДАКТИРОВАТЬ 1

Я пытаюсь снова после комментариев PhD.Я нахожусь в ветке, где мне нужно удалить gitmodule.Я отредактировал файл .gitmodules, чтобы удалить подмодуль, который мне нужно удалить, а затем попытался удалить подмодуль с помощью git rm -r <my_submodule>, но я получил сообщение fatal: Please, stage your changes to .gitmodules or stash them to proceed.

Поэтому я спрятал свои изменения и удалил подмодуль,Затем я смог оформить заказ в ветке master, и там была папка субмодулей (как мне было нужно).

Кроме того, мастер .gitmodules все еще показывал субмодуль, который я удалил из другой ветки, которая была моейцель.

Так что теперь у меня есть основная ветка с подмодулем, а ветка "dev" без него, и я могу установить здесь с помощью npm.Так что, думаю, я что-то напутал, и ответ, который я связал , был прав.Приму ответ phd, поскольку он был правильным.

Наконец, так как у меня есть версия git 2.7.4 и я не могу запустить git checkout --recurse-submodules master, я добавил этот GIT PPA (я использую Ubuntu)так как версия в диспетчере пакетов ОС была старше, обновил git до 2.19, запустил команду и все работало просто отлично.

Я использовал команду:

sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
apt-get install --only-upgrade git

РЕДАКТИРОВАТЬ2

Странно, я только заметил, когда переключаюсь на ветку «dev», что папка удаленного подмодуля все еще там, хотя .gitmodules не показывает подмодуль в списке.Также во время проверки в этой ветке я получил сообщение warning: unable to rmdir 'ol/ol-layerswitcher': Directory not empty.

Я предполагаю, что теперь эта папка больше не рассматривается как подмодуль, но она все еще там.Как я могу избавиться от него из ветки dev, а не из master-ветки (это был мой первоначальный вопрос), если это возможно?

FINAL ANSWER

Okответил сам.Мне просто нужно было удалить флодер без git rm.Теперь:

  1. ветке dev нечего зафиксировать
  2. папка подмодуля отсутствует
  3. когда я переключаюсь на нее, я не получаю никакого сообщения

ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ НЕ ИСТИНА!

Просто хотел добавить, что удаление файлов заставило их исчезнуть и в основной ветке.Единственное, что я мог сделать, очевидно, это жить с папкой submodules на ранчо devb, но просто «игнорировать» их с помощью .gitignore, чтобы не выдвигать их в мою удаленную ветку dev.

1 Ответ

0 голосов
/ 15 сентября 2018

В вашем вопросе не хватает нескольких важных деталей, поэтому давайте угадать недостающие части.Вы создали ветку, отредактировали .gitmodules (удалили из нее подмодуль) и удалили каталог подмодуля.Вы добавили и зафиксировали изменения в .gitmodules.

Я полагаю, что вы зафиксировали .gitmodules, потому что без этого вы не сможете оформить основную ветку.

Затем вы извлекли мастер и обнаружили, что подмодулькаталог отсутствует, верно?И в этом главная проблема вопроса?

К сожалению, так работают субмодули. Git не обновляет подмодули автоматически при оформлении заказа. Вы должны использовать git checkout --recurse-submodules master, если ваш Git достаточно свеж.

Или вам нужно разработать хук после проверки, которыйобновляет подмодули после проверки ветки.См. подробный пример .

...