Kalpa

 
« Back to blog

Импульсивность и git

В разработке программ я весьма импульсивен и резок. Правки часто делаю быстро. И тому конечно есть причины. Находясь в процессе изучения и описания одной задачи всплывают посторонние микро-задачки, или ошибки, или мелкие поправочки которые следует мгновенно исправить.
Конечно в git для этого есть удобные и практичные инструменты (branch, stash) да не всегда о них думаешь в программистском запале.

Решением для меня стало простое признание необходимости фиксировать каждую успешную компиляцию.
Для этого я создаю ветку devlog (или даже devlog/some_task) и в ней после каждой успешной компиляции среда разработки запускает скрипт, который фиксирует изменения. Когда же я прихожу к согласию с собой и признаю задачу решенной (или просто в нужный момент), я перекидываю --squash результирующий патч в нужную ветку ( для чего у меня есть спец. скриптец). Последняя же фиксация копируется в служебную ветку attic/с_датой_коммита.
Что мы имеем в результате?

  • Полная версия изменений локально хранится и доступна для анализа или аварийного восстановления
  • Лишнее не передается в основной репозиторий
  • Момент объединения результирующего коммита дополнительно фиксируется в архиве

Архивные ветки выглядят приблизительно так

  attic/09.10.30_15-44
  attic/09.10.30_16-08
  attic/09.10.30_16-21
  attic/09.10.30_17-24
  attic/09.10.30_17-29
  attic/09.10.31_14-32


И могут быть также легко удалены (Только если вы точно не хотите хранить историю (на всякий случай))

git branch | grep attic/0 | xargs git branch -D


На самом деле после столь жесткого удаления веток история все еще будет храниться в reflog. Но и её можно, при желании, победить (для совсем уже смелых)

git reflog expire --expire=0 --all
git repack -ad
git prune


Программируйте и ничего не бойтесь!

Loading mentions Retweet

Comments (0)

Leave a comment...

 
To leave a comment on this posterous, please login by clicking one of the following.
Posterous-login     Connect     twitter