I sh для удаления из истории git содержимого папки (которая может иметь рекурсивные папки). Однако у некоторых старых коммитов даже нет папки, в то время как у некоторых более новых коммитов есть файлы в этой папке, которые я хочу сохранить.
Допустим, папка имеет значение foo
(в пути /path/to/foo
), а файлы для хранения называются bar1
и bar2
(например, /path/to/foo/bar1
).
Я понимаю, что эта проблема не нова. В этом вопросе используется длинный и трудно читаемый (по крайней мере, для начинающего) скрипт. Этот вопрос более актуален и использует git filter-branch
, но я не понял, чем закончилось решение. Наконец, этот вопрос , вероятно, является наиболее похожим, но ответ не «рассечен» для тех, кто не обладает достаточным знанием git, чтобы понять, поэтому он не дает мне уверенности, чтобы попробовать команды .
Из того, что я видел, текущий подход для git 2.17 заключается в использовании git filter-branch
для каждой ветви. Затем используйте tree-filter
или index-filter
(из документации я не вижу разницы в вариантах использования). Наконец, команда git rm
с регулярным выражением, которое соответствует содержимому foo
, за исключением bar
. Первая часть регулярного выражения, вероятно, была бы простой (/path/to/foo/*
), но я не уверен, как добавить исключения.
Я был бы очень признателен, если бы кто-то мог разбить все это при представлении команды, которая решает эту проблему.