git filter-branch — удалить один из множества подмодулей

Я много использовал git filter-branch, чтобы избавиться от устаревших файлов, однако для голого репозитория git я не могу понять, как я могу переписать свою историю git, где один из моих подмодулей git удален.

У меня есть репо верхнего уровня «Дональд», а ниже «Дональда» у меня есть четыре подмодуля «Хьюи», «Дьюи», «Луи» и «Фуи» [1]. «Phooey» никогда не следовало добавлять — и, к сожалению, время ушло туда, где оно было на месте.

Лучшая ссылка, которую я нашел, это git filter-branch удалить все подмодули из моего репо, но это уже слишком.

[1] http://www.sullivanet.com/duckburg/phooey.htm :-)


person Peter Toft    schedule 30.04.2018    source источник
comment
Вы выполняете filter-branch на ветке, которую используют другие? В этом случае это может быть немного вредно, потому что, поскольку вы переписываете историю, вы переписываете коммиты, которые ваши товарищи по команде проверили и над которыми работают. В общем, использование filter-branch для удаления всего нескольких файлов в большинстве ситуаций кажется излишним. Если я правильно понимаю вашу ситуацию, наименее навязчивой, наименее сложной и наименее ненужной дополнительной работой для ваших коллег будет удаление папки и подтверждение удаления. Это также более прозрачно в истории, и люди увидят, что происходит.   -  person dvaergiller    schedule 30.04.2018
comment
@dvaergiller Я полностью понимаю, но у меня есть веские деловые причины двигаться в этом направлении.   -  person Peter Toft    schedule 01.05.2018


Ответы (1)


Во-первых, резервное копирование. Deinit и удалить только один модуль:

git filter-branch -f --prune-empty --tree-filter '
    git submodule deinit -f -- path/to/module &&
    git rm -rf path/to/module || :
' HEAD &&
rm -rf .git/modules/path/to/module 
person phd    schedule 30.04.2018
comment
он отлично работает для обычного репо, но не для голого репо - person Peter Toft; 01.05.2018
comment
В голом репо не может быть подмодулей, нечего удалять. - person phd; 01.05.2018
comment
Почему файл git .gitmodules остается нетронутым в любых последующих коммитах после первой итерации древовидного фильтра? - person stefanct; 30.09.2019
comment
Почему так должно быть? Ни одна из команд не касается .gitmodules. - person phd; 30.09.2019