v0.5.3
Example document / build (push) Has been cancelled
Python application / build (push) Has been cancelled

- Мелкие исправления увеличивающие работу конвертера
This commit is contained in:
Igor20264
2026-09-10 10:50:15 +03:00
parent 658036f920
commit f7136bd8bd
95 changed files with 7165 additions and 8771 deletions
+205
View File
@@ -0,0 +1,205 @@
# Ручная чистка 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 <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` и внутренние перекрёстные ссылки самого каталога.
Проверь сам, прежде чем удалять:
```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.