1 |
# svn checkout (svn co) svn://svn.mydomain.com/myrepo |
— извлечь файлы проекта из репозитория в текущий каталог, в котором выполняем эту команду
т.е создаем рабочую копию проекта
1 |
# svn update (svn up) |
— загрузить обновления из репозитория в рабочую копию(синхронизировать репозитарий с рабочей копией)
Если не указан номер ревизии, то используется ревизия HEAD
1 |
# svn update -r 3 update |
– синхронизировать рабочую копию с ревизией 3 репозитария
1 |
# svn update -r 3 file_name |
— извлечь третью ревизию файла
1 |
# svn add file_name |
— добавить файл в репозиторий
1 |
# svn commit -m "Added new file" |
– загрузка всех изменений с рабочей копии в репозитарий с комментарием, указанным после опции -m, позволяющей прокомментировать фиксируемые изменения, не запуская внешний текстовый редактор
1 |
# svn commit file_name |
— загрузка файла из рабочей копии в репозиторий/фиксация изменений конкретного файла
1 |
# svn move (mv, rename, ren) old_file new_file |
— переименовываем файл в рабочей копии или в репозитории ( по сути происходит копирование и удаление файла)
В рабочей копии изменения происходят моментально, а в репозитарии – после успешного коммита
1 |
# svn delete(del, remove, rm) file/directoty_name |
— удаляем файл/директорию из рабочей копии репозитария (для сохранения файла на локальной файловой систему используем опцию —keep-local). Из репозитария файл будет удален после успешного коммита/фиксации
1 |
# svn status (svn st) |
— просмотр статус всех файлов/каталогов в рабочей копии
1 |
# svn status -v (svn st -v) |
– более подробный статус (отображается полная информация по каждому элементу в ревизии). Первая колонка показывает статус файла/каталога, вторая колонка показывает рабочую правку элемента. Третья и четвертая колонки показывают правку, в которой элемент последний раз изменялся и автора этих изменений.
svn status не обращается к хранилищу, а работают только локально, сравнивая метаданные каталога .svn с рабочей копией
Для обращения к хранилищу используется опция -u
1 |
# svn status -u (svn st -u) |
— просматриваем локально измененные и изменившиеся в репозитории файлы
1 |
# svn status -q (svn st -q) |
— просматриваем ТОЛЬКО локально измененные файлы.При этом в выводе не будут отображаться неверсионные файлы
1 |
# svn diff |
– построчное отображение локальных изменений во всех изменившихся файлах
Команда svn diff формирует свой вывод, сравнивая ваши рабочие файлы с кэшированными «нетронутыми» копиями из .svn. Весь текст запланированных для добавления файлов показывается как добавленный, а весь текст запланированных для удаления файлов показывается как удаленный
Вывод происходит в едином формате представления различий. При этом удаленные строки предваряются знаком -, а добавленные — знаком +. Кроме этого svn diff печатает имена файлов и информацию о сдвиге информации, которая необходима программе patch, и, следовательно, вы можете получать «патчи», перенаправив вывод различий в файл svn diff > patchfile
1 |
# svn diff .htaccess |
— построчный просмотр локальных изменений в файле .htaccess
1 |
# svn diff -r 1:3 .htaccess |
– просмотр изменений между первой и третьей ревизией хранилища для файла .htaccess
1 |
# svn diff -r 2 |
— просмотр всех изменения между второй ревизией хранилища и текущей рабочей копией
1 |
# svn revert .htaccess |
— откатывает локальные изменения файла .htaccess
Subversion возвращает файл в состояние, предшествующее модификации, путем замены файла его кэшированной «первоначальной» копией из .svn-области.
svn revert .htaccess будет иметь точно такой же эффект, как и удаление .htaccess из вашей рабочей копии, а затем выполнение svn update -r BASE .htaccess. Однако, если вы отменяете изменения для файла, svn revert будет иметь одно значительное отличие — для восстановления файла не происходит соединения с хранилищем.
1 |
# svn revert -R ./ |
—-откатывает локальные изменения всех файлов
1 |
# svn log |
– Показывает вам развернутую информацию: лог-сообщения, присоединенные к правкам, с указанием даты изменений и их авторов, а также изменения путей к файлам в каждой правке
1 |
# svn log .htaccess |
— просмотр списка ревизий с комментариями файла .htaccess
1 |
# svn log -r 3 |
-просмотр комментариев в конкретной ревизии
По умолчанию лог сообщения выводятся в обратном хронологическом порядке. Если вам нужно увидеть другой диапазон правок в заранее определенном порядке или только одну правку, укажите параметр —revision (-r)
1 |
# svn log -r 19:5 |
— показывать логи для ревизии с 5 по 19 в обратном порядке
1 |
# svn log -r 5:19 |
— показывать логи для ревизий с 5 по 19 в хронологическом/прямом порядке
1 |
# svn cat .htaccess |
— просмотр содержимого файла .htaccess в репозитарии на текущий момент
1 |
# svn cat -r 4 .htaccess |
— просмотр содержимого файла .htaccess в конкретной(четвертой) ревизии хранилища
1 |
# svn list |
— просмотр содержимого репозитария без загрузки рабочей копии
1 |
# svn list --verbose |
– подробный вывод элементов репозитария
1 |
4 username 23 Jul 05 16:26 1.txt |
1 2 3 4 |
Первый столбец – номер ревизии последнего коммита(фиксации) (4) Второй столбец – автор последнего коммита (username) Третий столбец – размер(в байтах) (23) Четвертый столбец - дата и время последнего коммита (Jul 05 16:26) |
1 |
# svn list -r 3 |
— просмотр списка файлов/папок, содержащиеся в конкретной ревизии
1 |
# svn cleanup |
– рекурсивная очистка рабочей копии, удаление блокировок, выполнение незавершенных транзакций
Когда Subversion изменяет рабочую копию (или любую информацию в области .svn), она пытается делать это как можно более осторожно. Перед изменением рабочей копии Subversion записывает свои намерения в лог-файл. Затем для выполнения запрошенных изменений она выполняет команды из лог-файла, устанавливая блокировку той части рабочей копии, с которой работает — это делается для предотвращения работы других Subversion-клиентов с той рабочей копией, которая находится в промежуточном состоянии. После выполнения запрошеных действий Subversion удаляет лог файл.
svn cleanup: она ищет в рабочей копии и выполняет незавершенные лог-файлы, удаляя по ходу выполнения блокировки в рабочей копии
Не следует путать эти блокировки рабочей копии с обычными блокировками, которые устанавливают пользователи Subversion, использующие модель конкурентного управления версиями «блокировка-изменение-разблокировка»
Работа с игнор файлами/каталогами
1 |
# svn propset svn:ignore 1.txt . |
– добавить в игнор файл 1.txt в текущем каталоге
1 |
# svn proplist –v |
– просмотр игнорируемых файлов/каталогов в текущем каталоге
1 2 3 |
Properties on '.': svn:ignore 1.txt |
1 |
# svn propedit svn:ignore . |
– отредактировать(добавить/удалить) игнорируемые каталоги/файлы в текущем каталоге
1 |
# svn propedit svn:ignore 2 |
— отредактировать(добавить/удалить) игнорируемые каталоги/файлы в каталоге 2
1 |
# svn proplist 2 -v |
— просмотр игнорируемых файлов в каталоге 2
1 2 3 |
Properties on '2': svn:ignore 2.txt |
Использование команды propset перезапиcывает список уже существующих игнорируемых файлов/директорий указанными при ее выполнении файлами/директориями
1 |
# svn propset svn:ignore 2 |
1 |
# svn propdel svn:ignore 2 |
— удалить из игнорируемых все файлы/каталоги в каталоге 2
1 |
# svn copy svn://svn.mydomain.com/myrepo/trunk/ svn://svn.mydomain.com/myrepo/branches/mynewbranch/ |
— создать ветку с названием mynewbranch из главной линии разработки;
Просмотр возможных команд SVN
1 |
# svn --help |
1 |
# svn --help <command_name> |
— просмотр справки/помощи по каждой команде
Создание/восстановление дампа репозитария
Репозитарий myproject, расположенный по адресу /var/svn
Создание дампа SVN-репозитария
1 |
# svnadmin dump /var/svn/myproject > /root/myproject.dump |
Сжимаем созданный дамп
1 |
# gzip -9 /root/myproject.dump |
Либо с помощью одной команды
1 |
# svnadmin dump /var/svn/myproject | gzip -9 > /root/myproject.dump.gz |
Восстановление с бекапа репозитария
1 |
# gunzip /root/myproject.dump && svnadmin create /var/svn/myproject && chown -R www-data:www-data /var/svn/myproject && svnadmin load /var/svn/myproject < /root/myproject.dump |
Создать дамп с 5-й по 10-ю ревизию репозитария
1 |
# svnadmin dump /var/svn/myproject -r 5:10 > /root/myproject.dump |
Создать дамп только 1-й ревизии репозитария
1 |
# svnadmin dump /var/svn/myproject -r 1 > /root/myproject.dump |
Скрипт для ежедневного создания полных бекапов/дампов всех существующих репозитариев (на каждый репозитарий отдельный дамп) с удалением дампов/бекапов старше 7 дней.
С помощью системы мониторинга(Zabbix,Nagios и т.д.) мониторим файл /var/log/backup-svn.log, в который записываются результат выполнения дампа репозитариев
1 |
# nano /etc/cron.d/backup-svn |
1 |
45 3 * * * root /usr/local/scripts/backup-svn.sh > /dev/null 2>&1 |
1 |
# nano /usr/local/scripts/backup-svn.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#!/bin/bash REPOPATH="/var/svn/repos" STORAGEDIR="/backup-svn" DATE="$(date +"%Y-%m-%d")" LOGFILE="/var/log/backup-svn.log" AWK=$(which awk) SED=$(which sed) GREP=$(which grep) GZIP=$(which gzip) LS=$(which ls) ECHO=$(which echo) NICE=$(which nice) IONICE=$(which ionice) MKDIR=$(which mkdir) TAR=$(which tar) RM=$(which rm) FIND=$(which find) SVNADMIN=$(which svnadmin) LIMITTIME="+7" [ -d $STORAGEDIR/svn ] || $MKDIR -p $STORAGEDIR/svn for repo in $($LS -l $REPOPATH | $AWK '{print $9}' | $GREP -Ev 'excludereponame1|excludereponame2' | $SED '/^$/d'); do FILE=$STORAGEDIR/svn/$repo-$DATE.dump.gz $SVNADMIN dump --quiet $REPOPATH/$repo 2>>$LOGFILE | $GZIP > $FILE 2>>$LOGFILE if [ ${PIPESTATUS[0]} != "0" ]; then $ECHO "Backup SVN repo is failed $repo - $DATE" | tee -a $LOGFILE fi done cd $STORAGEDIR/svn $NICE -n 19 $IONICE -c2 -n7 $TAR -cf $STORAGEDIR/backup-repositories-${DATE}.tar *.dump.gz exitcode=$? if [ "$exitcode" != "1" ] && [ "$exitcode" != "0" ]; then $ECHO "Tar repositaries is failed - $DATE" | tee -a $LOGFILE Else $RM -rf $STORAGEDIR/svn/* $ECHO "Backup repositaries is done! Backup up to $DATE " | tee -a $LOGFILE fi $FIND $STORAGEDIR -maxdepth 1 -type f -name '*.tar' -mtime $LIMITTIME -exec $RM -rf {} \; |
Источник:
1.svn help
2.http://www.thegeekstuff.com/2011/04/svn-command-examples
3.https://www.if-not-true-then-false.com/2012/svn-subversion-backup-and-restore