to post messages and comments.

← All posts tagged Git

Если вам внезапно стало скучно на работе, попробуйте так:

git commit
git push
#отредактируйте кучу файлов
git add -u

# а теперь — хуууууу-як!
git commit --amend
git push

В этом месте у вас должно появиться чудесное занятие на ближайшие минут 20.

Есть идея для JS-проекта. Универсальный движок оффлайн-синхронизации. Положим, у нас есть редактор чего-то в виде веб-приложнния. Задача — обеспечить ему бесперебойную работы в оффлайне. Как это сделать? Мы редактируем коллекцию JSON-документов. На серваке они где-то хранятся в БД. Клиент перед работой вытягивает последнюю ревизию документов. Потомна клиенте пользователь что-то меняет. Создаются коммиты. Каждый коммит хранится в виде диффа от предыдущей ревизии (на JS уже давно есть все необходимые библиотеки).
Потом приходит время делать push. Но сначала надо сделать pull --rebase, чтобы вытянуть с сервака последние изменения — вдруг кто-то что-то менял до того. Клиент посылает HTTP-запрос: "у меня последняя ревизия, полученная с сервака — такая-то. дай мне коммиты с тех пор". Сервак возвращает коммиты. Клиент накатывает их на последнюю полученную с сервака ревизию. Потом пытается сверху накатить свои локальные коммиты (ну — все как в таром добром git, только проще — без веток). Если все получилось, то отсылаем на сервак локальные коммиты, фиксируем транзакцию (сервак отвечат: "да, я получил твои коммиты", клиент считает их уже не локальными).
Я считаю, что современные веб-приложения так и должны работать. Надо ставить во главу угла автономность. Но почему-то подобный функционал мы если и видим, то, преимущественно, в проприетархных продуктах. Надо прорабатывать эту концепцию, потому что очень много реально интересных штук можно построить на этом!