# Ручная чистка git Команды для удаления мусора из репозитория. Всё под PowerShell — помни, что `&&` там не работает как разделитель, используй `;` или отдельные вызовы. Файл описывает то, что осталось сделать руками. То, что уже сделано агентами и лежит в staging, перечислено в конце для сверки. --- ## 0. Подготовка Чтобы git печатал кириллические имена читаемо, а не как `\320\242...`: ```powershell git config core.quotepath false ``` Снимок текущего состояния — на случай, если захочется откатиться: ```powershell git status --short > ..\git-status-before.txt git stash list ``` Ничего из перечисленного ниже не переписывает историю и не трогает remote, так что откат всегда возможен через `git restore --staged `. --- ## 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` и внутренние перекрёстные ссылки самого каталога. Проверь сам, прежде чем удалять: ```powershell git grep -n "Other_Code" -- ':!Other_Code' ':!PROJECT.md' git grep -nE "^\s*(import|from)\s+(scripts|validation)\b" -- 'md2gost' 'word2md' 'md2latex' 'md2fodt' 'tests' ``` Ожидаемый результат обеих команд — пусто. ### Вариант А: снять с отслеживания, файлы оставить на диске Подходит, если хочешь держать схемы под рукой локально. ```powershell git rm -r --cached Other_Code Add-Content -Path .gitignore -Value "`n# Справочные схемы OOXML (не часть продукта)`n/Other_Code/" ``` ### Вариант Б: удалить полностью ```powershell git rm -r Other_Code ``` ### Вариант В: вынести в отдельную ветку и потом удалить Если материал ценен, но не должен висеть в основной ветке: ```powershell 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`: персональные данные, причём ФИО прямо в имени файла. Ни одной ссылки из кода, тестов или сборочных скриптов. Снять с отслеживания, файлы оставить на диске: ```powershell git rm --cached "Практическая_работа_6.docx" git rm --cached "ТарасовИА_КР_v3.docx" ``` Если кириллица в аргументах ломается, обойди её через pathspec по расширению и отбери нужное вручную: ```powershell git ls-files "*.docx" ``` Правило в `.gitignore`, чтобы не вернулись: ```powershell 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`. Правило выше их исключает, но проверь результат: ```powershell git check-ignore -v md2gost/Template.docx md2gost/TitleTemplate.docx ``` Обе строки должны вернуть пусто (то есть файлы НЕ игнорируются). Если вернули правило — убери `/*.docx` и перечисли два личных файла поимённо. --- ## 3. Проверка результата ```powershell git status --short git ls-files | Measure-Object | Select-Object -ExpandProperty Count ``` Размер отслеживаемого дерева до и после: ```powershell (git ls-files | ForEach-Object { (Get-Item -LiteralPath $_).Length } | Measure-Object -Sum).Sum/1MB ``` Убедись, что ничего живого не выпало: ```powershell .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 устарел): ```powershell 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 ``` Перед этим обязательно: 1. Сделай полную копию каталога `.git`, а лучше всего репозитория — операция необратима. 2. Учти, что все хеши коммитов сменятся. Если репозиторий уже где-то запушен, всем придётся клонировать заново. 3. Прогони `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`, хотя на диске целы. Если какой-то из них нужен под версионным контролем, добавь исключение: ```powershell Add-Content -Path .gitignore -Value "!/tmp_arch.puml" ``` Каталог `ai/` не тронут и остаётся untracked.