Files
Igor20264 f7136bd8bd
Example document / build (push) Has been cancelled
Python application / build (push) Has been cancelled
v0.5.3
- Мелкие исправления увеличивающие работу конвертера
2026-09-10 10:50:15 +03:00

9.4 KiB
Raw Permalink Blame History

Ручная чистка 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

Перед этим обязательно:

  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, хотя на диске целы. Если какой-то из них нужен под версионным контролем, добавь исключение:

Add-Content -Path .gitignore -Value "!/tmp_arch.puml"

Каталог ai/ не тронут и остаётся untracked.