Как стать автором
Обновить

Контроль изменений в рабочих директориях

Время на прочтение 2 мин
Количество просмотров 1.5K
Вероятно, у каждого разработчика есть рабочая папка с чекаутами (svn) и клонами (git, hg) разных проектов. Называют ее по разному: workspace, work, src и т.д.

Бывает ли такое, что Вы забываете закоммитить или запушить изменения в рабочих директориях? Даже если ответ — не часто, но бывает, то Вам стоит познакомиться с утилитой unpushed. Она помогает поддерживать рабочую папку с проектами всегда в чистом и консистентном состоянии.

Например, у меня в папке ~/workspace около 20-ти проектов от разных репозиториев. По каким-либо причинам я хочу этот workspace удалить. Перед этим нужно проверить, точно ли все закоммичено. В ручную сделать это не очень то и быстро. Так и родился этот скрипт.

Под катом краткий обзор программы.

unpushed — это Python программа. Устанавливается с помощью pip или easy_install:
$ sudo pip install unpushed
или
$ pip install --user unpushed

Используется очень просто. Чтобы вывести список всех незакоммиченых и незапушеных изменений в рабочей папке ~/workspace:
$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

В настоящий момент поддерживаются следующие VCS:
  • Mercurial
  • Git
  • Subversion

По-умолчанию unpushed использует locate(1) для поиска репозиториев в рабочей папке с проектами. Также можно использовать простой find(1), если у Вас не работает locate:
$ unpushed -w ~/workspace
О других ключах командной строки можно узнать, вызвав утилиту с опцией --help.

Desktop уведомления

$ unpushed-notify ~/workspace
вызовет unpushed и покажет уведомление на рабочем столе (в Linux через библиотеку libnotify), если есть изменения. Удобно делать вызов этой утилиты по расписанию. Для этого запустите редактор crontab для Вашего(!) пользователя:
$ crontab -e
и добавьте строку, типа этой:
*/10 18-20 * * * unpushed-notify ~/workspace
После этого, Ваша рабочая папка будет сканироваться каждые 10 минут в конце рабочего дня. Если будут обнаружены незакоммиченые изменения, то будет выводиться сообщение на рабочий стол.

Ограничения

Поддержка незакоммиченых изменений есть для всех перечисленных VCS. Незапушеные ветки поддерживаются только для Git. Поддержку Mercurial добавить должно быть очень просто, но я никогда с ним не работал и не знаю как это делается.

Desktop уведомления работают только под Linux с использованием библиотеки pynotify, т.е. на всех современных дистрибутивах.

Disclaimer

Это форк проекта uncommited. Добавил поддержку незапушеных веток и Desktop уведомлений. Реализовал для себя, лишь потом подумал, что возможно это еще кому-нибудь пригодится. Поэтому утилита ограничена в основном использованием под Linux для Git.

Если у кого-нибудь возникнет желание добавить поддержку уведомлений для других ОС или поддержку веток в Hg — велкам. Приму ваш pull request на гитхабе.
Теги:
Хабы:
+7
Комментарии 9
Комментарии Комментарии 9

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн