9.4 KiB
Ручная чистка git
Команды для удаления мусора из репозитория. Всё под PowerShell — помни, что && там не работает как разделитель, используй ; или отдельные вызовы.
Файл описывает то, что осталось сделать руками. То, что уже сделано агентами и лежит в staging, перечислено в конце для сверки.
0. Подготовка
Чтобы git печатал кириллические имена читаемо, а не как \320\242...:
git config core.quotepath false
Снимок текущего состояния — на случай, если захочется откатиться:
git status --short > ..\git-status-before.txt
git stash list
Ничего из перечисленного ниже не переписывает историю и не трогает remote, так что откат всегда возможен через git restore --staged <path>.
1. Other_Code/ — 59 файлов, 1158 КБ
Что это: схемы OOXML (*.xsd), скрипты pack/unpack/validate, document.py, utilities.py, docx-js.md, SKILL.md. Справочный материал.
Почему можно убирать: ни одного импорта из md2gost, word2md, md2latex, md2fodt, tests/, ни упоминания в .spec, .bat, .github/workflows/, pyproject.toml. Единственные ссылки — раздел 12 в PROJECT.md и внутренние перекрёстные ссылки самого каталога.
Проверь сам, прежде чем удалять:
git grep -n "Other_Code" -- ':!Other_Code' ':!PROJECT.md'
git grep -nE "^\s*(import|from)\s+(scripts|validation)\b" -- 'md2gost' 'word2md' 'md2latex' 'md2fodt' 'tests'
Ожидаемый результат обеих команд — пусто.
Вариант А: снять с отслеживания, файлы оставить на диске
Подходит, если хочешь держать схемы под рукой локально.
git rm -r --cached Other_Code
Add-Content -Path .gitignore -Value "`n# Справочные схемы OOXML (не часть продукта)`n/Other_Code/"
Вариант Б: удалить полностью
git rm -r Other_Code
Вариант В: вынести в отдельную ветку и потом удалить
Если материал ценен, но не должен висеть в основной ветке:
git subtree split --prefix=Other_Code -b reference/ooxml-schemas
git rm -r Other_Code
Ветка reference/ooxml-schemas останется локально с полной историей каталога.
После любого варианта подчисти упоминание в PROJECT.md, раздел 12.
2. Личные документы в корне
Практическая_работа_6.docx 42 КБ
ТарасовИА_КР_v3.docx 2326 КБ
Та же категория, что и md2gost.user.json: персональные данные, причём ФИО прямо в имени файла. Ни одной ссылки из кода, тестов или сборочных скриптов.
Снять с отслеживания, файлы оставить на диске:
git rm --cached "Практическая_работа_6.docx"
git rm --cached "ТарасовИА_КР_v3.docx"
Если кириллица в аргументах ломается, обойди её через pathspec по расширению и отбери нужное вручную:
git ls-files "*.docx"
Правило в .gitignore, чтобы не вернулись:
Add-Content -Path .gitignore -Value "`n# Личные документы (ФИО в имени файла)`n/*.docx`n!md2gost/Template.docx`n!md2gost/TitleTemplate.docx"
Осторожно с этим правилом. md2gost/Template.docx и md2gost/TitleTemplate.docx — живые файлы, они force-include в колесо через pyproject.toml и попадают в exe через .spec. Правило выше их исключает, но проверь результат:
git check-ignore -v md2gost/Template.docx md2gost/TitleTemplate.docx
Обе строки должны вернуть пусто (то есть файлы НЕ игнорируются). Если вернули правило — убери /*.docx и перечисли два личных файла поимённо.
3. Проверка результата
git status --short
git ls-files | Measure-Object | Select-Object -ExpandProperty Count
Размер отслеживаемого дерева до и после:
(git ls-files | ForEach-Object { (Get-Item -LiteralPath $_).Length } | Measure-Object -Sum).Sum/1MB
Убедись, что ничего живого не выпало:
.venv\Scripts\python.exe -c "import md2gost, word2md, md2latex, md2fodt; print('ok')"
$env:PYTHONIOENCODING="utf-8"; .venv\Scripts\python.exe -m md2gost --help
.venv\Scripts\python.exe -m pytest -q
Переменная PYTHONIOENCODING нужна из-за cp1251 в консоли — без неё --help падает на символе →, хотя код в порядке.
4. Про историю: снятие с отслеживания её не чистит
Это важно понимать. git rm --cached убирает файл из индекса и будущих коммитов, но все прошлые коммиты остаются нетронутыми. То есть:
md2gost.user.jsonс твоими ФИО и группой по-прежнему лежит в историиТарасовИА_КР_v3.docxтоже, все 2.3 МБ, в каждом коммите, где он менялся- удалённые прототипы
mm2.py/mm3.pyиOther_Code/продолжают занимать место в.git
Если репозиторий приватный и таким останется — этого достаточно, дальше можно не читать.
Если планируешь публиковать, историю надо переписывать. Инструмент — git filter-repo (BFG устарел):
uvx git-filter-repo --path md2gost.user.json --invert-paths
uvx git-filter-repo --path "ТарасовИА_КР_v3.docx" --invert-paths
uvx git-filter-repo --path Other_Code --invert-paths
Перед этим обязательно:
- Сделай полную копию каталога
.git, а лучше всего репозитория — операция необратима. - Учти, что все хеши коммитов сменятся. Если репозиторий уже где-то запушен, всем придётся клонировать заново.
- Прогони
git reflog expire --expire=now --all; git gc --prune=now --aggressive, иначе объекты останутся в паке.
Я специально не делал это автоматически: перезапись истории — необратимая операция, её стоит запускать осознанно и на копии.
Приложение: что уже сделано агентами
Всё перечисленное лежит в staging, не закоммичено. Просмотри git diff --cached перед коммитом.
Удалено с диска (мёртвые прототипы, 6777 строк):
mm2.py mm3.py mm4.py mm5.py main12.py main.py
asd.py parser.py font.py _audit_tmp.py
poetry.lock requirements.txt
Снято с отслеживания, файлы остались на диске:
ReadMe.docx md2gost/README.docx
tmp_listing_word.md/.docx tmp_readme_word.docx
tmp_readme_word2.docx README.md1
examples/example_out.docx examples/toc_manual.docx
examples/toc_native.docx tests/_idef0_preview*.png/.svg
latex/mirea/Settings/FiraCode-Regular.otf
ad/ (4 файла) md2gost.user.json
Перенесено с сохранением истории:
_method_extract.txt -> docs/reference/method-mirea-2022.txt
tests/extended_mardown/ -> tests/extended_markdown/
Добавлено: md2gost.user.json.example с пустыми полями.
Побочный эффект правил игнора, о котором стоит знать
Новые правила /tmp_*.png и /tmp_*.puml захватили рабочие черновики tmp_org_full.*, tmp_org_uml.*, tmp_arch.* — они пропали из git status, хотя на диске целы. Если какой-то из них нужен под версионным контролем, добавь исключение:
Add-Content -Path .gitignore -Value "!/tmp_arch.puml"
Каталог ai/ не тронут и остаётся untracked.