Локальная машина времени для твоего кода. Без гита, без боли, на лету.
Представь, что у твоего редактора кода появился видеорегистратор (или черный ящик). Ты просто запускаешь его в фоне и идешь кодить. Он тихо пишет каждое твое сохранение файла. Если ты случайно сломал проект, стер нужный кусок кода или ушел не в ту степь — ты просто вводишь время, когда «всё работало», и получаешь срез своего кода из прошлого в отдельной папочке.
- «Блин, 5 минут назад же работало!» — классика. Ты написал код, он выдал нужный результат. Ты решил его «чуть-чуть причесать и улучшить». Всё ломается к чертям, ты судорожно жмешь
Ctrl+Z, но лимит отмены в редакторе внезапно кончился. Или ты случайно закрыл вкладку в VS Code, и история редактора просто стерлась.dev-replayпомнит всё. - «Да я только одну строчку поменял, почему всё упало?!» Знакомая ситуация, когда проект перестает собираться из-за какой-то мелкой опечатки, а ты в упор не видишь, где косяк, и сидишь перебираешь файлы вручную. Пишешь
dev historyи сразу видишь точный лог всех своих изменений по секундам. - Мусорная история в гите. Чтобы не потерять рабочий кусок кода перед сомнительным экспериментом, приходится делать коммиты вроде
wip,test,asdasd,fix2. С этой тулзой про этот стыд можно забыть: экспериментируй как хочешь, код бэкапится сам при каждом нажатииCtrl+S, а гит-лог остается девственно чистым. - Страх стереть то, что есть. Обычные откаты изменений часто затирают текущие файлы. Здесь всё безопасно: когда ты вызываешь машину времени, она не трогает твой текущий (пусть и сломанный) код, а аккуратно собирает рабочую копию из прошлого в изолированную папку
time_machine. Ты вообще ничем не рискуешь.
Для работы нужен только Python 3.
1. Скачиваем тулзу к себе на комп: Желательно положить её куда-нибудь в домашнюю директорию, чтобы она всегда была под рукой.
cd ~
git https://github.com/marpelskiy/devReplay
cd dev-replay
2. Настраиваем окружение (рекомендуется):
Чтобы не засорять систему, создадим локальное виртуальное окружение и поставим туда watchdog (библиотека, которая следит за файлами).
python3 -m venv venv
source venv/bin/activate
pip install watchdog
3. Создаем глобальную команду dev:
Чтобы ты мог вызывать магию из любой папки любого проекта, добавим алиас в твой терминал.
Открой конфиг терминала (например, ~/.zshrc, ~/.bashrc или ~/.config/fish/config.fish) и в самый низ добавь эту строку:
alias dev='python ~/dev-replay/start.py'
Не забудь перезапустить терминал (или прописать source ~/.zshrc).
У тебя есть всего 3 команды. Работать с ними нужно находясь внутри папки твоего проекта (того, который ты сейчас кодишь).
Открываешь терминал в папке проекта и пишешь:
dev log
Скрипт спросит путь, просто нажми Enter (он сам поймет, что ты уже в нужной папке).
Всё, можешь сворачивать этот терминал. Инструмент будет висеть в фоне и логировать каждый раз, когда ты сохраняешь файлы (.py, .js, .html и т.д.). Системные папки типа .git или node_modules он игнорирует, так что комп тормозить не будет.
Допустим, код сломался. Ты хочешь понять, что делал последние полчаса. Открываешь новую вкладку терминала и пишешь:
dev history
Ты увидишь примерно это:
последние 15 действий:
[20:12:05] api.py -> добавил: 'def fetch_data():' (строка 10)
[20:15:22] config.json -> удалил: '"debug": true' (строка 4)
[20:18:40] main.py -> добавил: 'print("test")' (строка 42)
Сразу становится понятно, когда всё пошло не так.
Ты понял, что в 20:15 проект еще жил. Воскрешаем его:
dev replay
- Скрипт снова спросит путь — жмем Enter.
- Спросит время — вводим
20:15(или с секундами20:15:22).
Что произойдет?
В корне твоего проекта появится скрытая папка .dev-replay/time_machine/. Внутри неё будет лежать точная копия твоего проекта (только те файлы, которые ты менял), ровно в том виде, в котором они были в 20:15. Берешь оттуда нужный кусок кода, вставляешь в свой сломанный файл — и идешь пить кофе.
- Где хранятся логи? Внутри твоего проекта создается скрытая папка
.dev-replay. В ней лежит файлlog.jsonl. - Как не слить логи на GitHub?
ОБЯЗАТЕЛЬНО добавь папку
.dev-replay/в.gitignoreтвоего проекта, чтобы случайно не запушить всю эту историю изменений в публичный репозиторий. - Очистка.
Если проект долгий, лог-файл может разрастись. Если история тебе больше не нужна, просто удали папку
.dev-replayручками, и при следующем запускеdev logвсё начнется с чистого листа.
Инструмент вообще не мешает твоему проекту и аккуратно раскладывает всё по полочкам. Вот как это выглядит изнутри:
твой_проект/
├── src/
├── main.py
├── ...
└── .dev-replay/ # ← Скрытая папка, создается сама при «dev log»
├── log.jsonl # ← Твой «черный ящик». Сюда летят диффы и слепки кода
└── time_machine/ # ← Появляется только после команды «dev replay»
├── src/
└── main.py # ← Твой чистый и рабочий код из прошлого
.dev-replay/— техническая папка утилиты. Она скрыта по умолчанию, чтобы не мозолить глаза в боковой панели VS Code или в терминале.log.jsonl— файл, куда дописываются JSON-строки при каждом нажатииCtrl+S. Формат.jsonlвыбран не просто так: он позволяет дописывать данные мгновенно, не перечитывая весь файл целиком, так что диск не напрягается.time_machine/— изолированный буфер. Сюда скрипт вытаскивает файлы на нужную тебе минуту. Ты можешь просто скопировать отсюда старый код, либо открыть эту папку рядом в редакторе, чтобы сравнить изменения.
Сделано для того, чтобы сберечь нервы разработчиков. ☕️