svn
Информация о VCS (Version Control Systems) в приглашении zsh
При переходе на git пришла в голову мысль что было бы удобно видеть в приглашении zsh в каком состоянии локальный репозиторий.
Всевозможные rebase, am, merge и подобное сбивает с толку.
Сказано - сделано. Написал собственный велосипед. Потом нашел еще парочку велосипедов в интернете, разобрал на запчасти и прикрутил к своему велосипеду новенькие колеса и смазал педали. Но вскоре, к своему стыду, в мане zsh увидел уже готовый даже не велосипед, а целый танк с экипажем. И собакой в придачу.
Вот он
$ PAGER=less LESS='-p VERSION CONTROL SYSTEMS' man zshallТворчески переосмыслив пример из мана вот что получилось
autoload -Uz vcs_info # включаем только git svn svk cvs. Возможные VCS можно посмотреть командой vcs_info_printsys zstyle ':vcs_info:*' enable git svn svk cvs # домашняя директория из CVS репозитория. Исключаем ее и некоторые директории из домашнего репозитория zstyle ':vcs_info:*' disable-patterns "$HOME(|/.*|/bin)" # Модифицированная версия из man zshcontrib, добавлены флажки staged и unstaged изменений zstyle ':vcs_info:*' actionformats '%F{5}(%f%s%F{5})%F{3}%m%F{5}[ %F{2}%b%F{3}|%F{1}%a%F{5}][ %B%F{yellow}%c%F{red}%u%%b%F{5}]%f ' zstyle ':vcs_info:*' formats '%F{5}(%f%s%F{5})%F{3}%m%F{5}[ %F{2}%b%F{5}][ %B%F{yellow}%c%F{red}%u%%b%F{5}]%f ' zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r' zstyle ':vcs_info:*' check-for-changes true zstyle ':vcs_info:*' get-revision true setopt prompt_subst RPROMPT=$'${vcs_info_msg_0_}%b%F{cyan}%T%f' # в zsh >= 4.3.11 можно add-zsh-hook precmd vcs_info precmd () { vcs_info }
Ну и как всегда: Live demo! Ж:-)
Откат в Subversion
Для отката на ревизию в прошлом, необходимо выполнить следующие магические заклинания:
$ svn merge -rHEAD:xxxx [путь к svn репозиторию] [путь к локальной копии]
Где xxxx -- нужная прошлая ревизия
Затем можно сделать
$ svn commit
По материалам http://sankas.blogspot.com/2008/02/how-to-rollback-svn-repository-to.html
Как удалить файлы из Subversion (SVN) репозитория
Файлы из SVN репозитория нельзя удалить подобно файлам из CVS. Для удаления могут быть разные причины, включая случайный commit или разделение одного репозитория на несколько. На будущее разработчики запланировали опцию 'obfuscate', но в настоящее время единственным способом является следующий:
svnadmin dump /путь/к/репозиторию > myrepo.dump cat myrepo.dump | svndumpfilter exclude /путь/к/ненужным/файлам/репозитория >myrepo.clean mv /путь/к/репозиторию /путь/к/репозиторию.bkp svnadmin create --fs-type fsfs /путь/к/репозиторию svnadmin load myrepo.clean
Пояснения к коду ниже:
Права на запуск на файлах в репозиториях subversion
Для того то бы хранить в репозитории исполняемые скрипты с правами на запуск, svn предоставляет специальное property svn:executable. Обычно при коммите, если файл имеет права на исполение, svn автоматически устанавливает это property. Но если вам надо уборать права на исполение, то надо удалить svn:executable напрямую.
ramok@~work/stable-1-3/ds/scripts/ svn proplist header.gif Properties on 'header.gif': svn:executable svn:mime-type ramok@~work/stable-1-3/ds/scripts/ svn propdel svn:executable header.gif Logo.jpg property 'svn:executable' deleted from 'header.gif'. property 'svn:executable' deleted from 'Logo.jpg'. ramok@~work/stable-1-3/ds/scripts/ svn commit -m "fix permission on header.gif Logo.jpg"
Git и Subversion могут жить вместе
Предположим, что у вас есть централизованный сервер с svn репозиторием, но вы хотите использовать git локально, делать commit'ы, ветки и другие прелести децентрализованной системы контроля версий. С помощью git-svn это довольно просто.
Просмотр изменений из svn в vim
В svn можно вызвать внешнюю программу просмотра изменений. А в vim имеется для этого специальный режим. Если сложить эти два обстоятельства вместе, можно очень удобно просматривать изменения в vim из svn Ж:-)
1. Создаем ~/bin/vimdiff-svn, даем ему права на исполнение и убеждаемся что ~/bin находится в нашем $PATH
#!/bin/sh while [ $# -gt 2 ]; do shift; done vim -d $@
2. Запускаем
$ svn diff --diff-cmd vimdiff-svnи наслаждаемся результатом Ж:-) Что бы просмотреть следующий файл - выходим из vim (удобно по :qa или :qa!)
Пример использования основанный на этом .
$ svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kdelibs/kdecore/ $ cd kdecore $ svn diff -r 181258:183456 kglobalaccel_x11.cpp --diff-cmd vimdiff-svn
Просмотр diff из потока в цвете
Часто приходится смотреть diff не из файла, а из потока, например сформированный командой cvs diff или svn diff.
Удобно в таком случае просматривать в цвете в vim, не записывая в файл, а прямо в потоке.
наример:
$ svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kdelibs/kdecore/ $ cd kdecore $ svn diff -r 181258:183456 kglobalaccel_x11.cpp | vim -
diff покажется красиво раскрашенным Ж:-)
PS


