Что такое буфер магазина?

Поскольку git1.8.3 (22 апреля 2013 г.) :

Не было никакого фарфорового способа сказать: «Я больше не интересуюсь этим подмодулем», один раз вы выражаете свой интерес к подмодулю с помощью «submodule init». «submodule deinit» - это способ сделать это.

Процесс удаления также использует git rm (начиная с git1.8.5 октября 2013 г.).

Резюме

Процесс удаления из трех шагов будет следующим:

0. mv a/submodule a/submodule_tmp

1. git submodule deinit -f -- a/submodule    
2. rm -rf .git/modules/a/submodule
3. git rm -f a/submodule
# Note: a/submodule (no trailing slash)

# or, if you want to leave it in your working tree and have done step 0
3.   git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule

Объяснение

rm -rf: Это упоминается в Даниэль Шредер ответ и суммирован в Eonil в комментариями :

Это оставляет .git/modules// неизменным. Поэтому, если вы однажды удалите подмодуль с этим методом и снова добавите их снова, это будет невозможно, потому что репозиторий уже поврежден.


git rm: См. commit 95c16418 :

В настоящее время с использованием «git rm» на подмодуле удаляется дерево работы подмодуля с деревом суперпроекта и gitlink из индекса. Но раздел подмодуля в .gitmodules остается нетронутым, что является остатком теперь удаленного подмодуля и может раздражать пользователей (в отличие от настройки в .git/config, это должно оставаться напоминанием о том, что пользователь проявил интерес к этому подмодулю поэтому он будет заселен позже, когда будет проверено более старое комманда).

Пусть «git rm» поможет пользователю не только удалить подмодуль из дерева работ, но и удалить «submodule. "из файла .gitmodules и обе стадии.


git submodule deinit: Это связано с этим патчем :

С помощью «git submodule init» пользователь может сказать git, что он интересуется одним или несколькими подмодулями, и хочет, чтобы он был заполнен при следующем вызове на «git submodule update». Но в настоящее время нет простого способа, чтобы они могли сказать git, что они больше не интересуются подмодулем, и хотят избавиться от локального дерева работ (если пользователь не знает много о внутренних функциях подмодуля и удаляет настройку «submodule.$name.url» из .git/config вместе с самим деревом работы.

Помогите этим пользователям предоставить команду «deinit». Это удаляет весь раздел submodule. из .git/config либо для данного подмодуля (ов) (или для всех тех, которые были инициализированы, если задано «.»). Сбой, если текущее дерево работы содержит модификации, если не принудительно. Жалуйтесь, если для подмодуля, указанного в командной строке, настройка URL не найдена в .git/config, но, тем не менее, не прерывается.

Это позаботится, если шаги инициализации (de) (.git/config и .git/modules/xxx)

Поскольку git1.8.5, git rm принимает также уход за:

  • 'add' шагом, который записывает url подмодуля в файле .gitmodules: его нужно удалить для вас.
  • специальная запись подмодуля (как иллюстрируется этот вопрос ): git rm удаляет его из индекса: git rm --cached path_to_submodule (без конечной косой черты) Это удалит этот каталог хранится в индексе со специальным режимом «160000», отмечая его как корневой каталог подмодуля.

Если вы забудете этот последний шаг и попытаетесь добавить то, что было подмодулем, как регулярный каталог, вы получите сообщение об ошибке вроде:

git add mysubmodule/file.txt 
Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'

Примечание: поскольку Git 2.17 (Q2 2018), git submodule deinit больше не является скриптом оболочки. Это вызов функции C.

См. commit 2e61273 , commit 1342476 (14 января 2018 г.) в Пратамеш Чаван (pratham-pc) . (Слияние с Junio ​​C Hamano - gitster - в совершить ead8dbe , 13 февраля 2018 г.)

git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit \
  ${GIT_QUIET:+--quiet} \
  ${prefix:+--prefix "$prefix"} \
  ${force:+--force} \
  ${deinit_all:+--all} "$@"

30
задан harish reddy 19 June 2012 в 17:03
поделиться