Умный Экспорт Из Svn С Помощью Консоли

Я начал использовать svn еще во время работы в Windows и соответственно использовал его как клиент ЧерепахаSVN .

В то время я был очень взволнован новой функцией, описанной в статье.

Умный экспорт из SVN с использованием TortoiseSVN .

Буквально недавно я сделал то, на что давно не было времени — установил Linux на свой рабочий компьютер.

И вот незадача, подобного функционала я не нашел ни в одном из опробованных мною графических клиентов.

Мало.

Прочитав svn --help, я не нашел опции, дающей такой результат. Это позор.

Учитывая, что департамент уже научился делать такой экспорт для плавного обновления проектов.

В общем, не буду медлить: я написал bash-скрипт, который сравнивает и экспортирует различия между двумя ревизиями.



Код

 #!/bin/bash
 
 if [ $# -lt 2 ] ; then
  echo "usage: start_revision end_revision [project_name]"
  exit 0
 fi
 
 dir_prefix='!UPDATES/'
 svn_repo='svn://<svn_host>:<svn_port>'
 
 
 if [[ $3 != '' ]]
     then
         project=$svn_repo'/'$3'/'
     fi
 revision_start=$1
 revision_end=$2
 
 files=`svn diff --summarize -r $revision_start:$revision_end $project | awk '{print \$2}'`
 echo "svn diff --summarize -r $revision_start:$revision_end $project | awk '{print \$2}'"
 declare -a filelist
 i=0
 for file in $files;
 do
     dir=''
     filelist[$i]=`echo $file | sed -e 's/\//\n/g'`
     j=0
     declare -a items
     for item in ${filelist[$i]};
     do
         items[$j]=$item
         j=`echo $j+1 | bc`
     done
 
     #create dirs
     j=0
     cur_dir=''
     els_count=`echo ${#items[@]}-1 | bc`
     for ditem in ${items[@]};
     do
         if [[ $j = $els_count ]] #if lat element - it's filename
         then
             #store filename
             file_name=$ditem
             break
         fi
         cur_dir=$cur_dir$ditem'/'
         j=`echo $j+1 | bc`
     done
     dir=${dir_prefix}`date +%Y-%m-%d`'/'${revision_end}'/'$cur_dir
     mkdir -p $dir
 
     #export files in created dirs
     svn export -r $revision_end $project$file .

/$dir$file_name i=`echo $i+1 | bc` done



Настройки

Зарегистрируйте хост, на котором расположен svn-сервер.



Применение

  1. Введите каталог с рабочей копией
  2. Или введите произвольный каталог
В результате в текущем каталоге появится каталог !UPDATS/текущая дата/номер окончательной ревизии/, который будет содержать изменения между этими номерами ревизий с учетом вложенности каталогов.

Используй это.

"=" Теги: #svn #subversion #linux #bash #частичный экспорт #сравнение ревизий #diff #Управление проектами

Вместе с данным постом часто просматривают: