v0.5.3
- Мелкие исправления увеличивающие работу конвертера
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user