Pull to refresh

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

Website development
Вероятно, у каждого разработчика есть рабочая папка с чекаутами (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 на гитхабе.
Tags:githgmercurialsvnsubversionunpushed
Hubs: Website development
Total votes 15: ↑11 and ↓4 +7
Views1.3K

Comments 9

Only those users with full accounts are able to leave comments. Log in, please.

Popular right now

UX-дизайнер
April 23, 202159,900 ₽Нетология
Administrator Linux.Basic
April 24, 202155,000 ₽OTUS
Node.js: серверный JavaScript
April 26, 202127,000 ₽Loftschool