Если Вы хотите использовать RCS вместо CVS, то могут пригодиться следующие скрипты оболочки.
#!/bin/ksh # cotree.sh (Скрипт оболочки для извлечения дерева каталогов) # cotree.sh - Извлечение целого RCS-каталога # Вызов: # Для получения всех каталогов: # unix> cotree.sh # # Для получения дерева единственного каталога: # unix> cotree.sh <имя каталога> # Смотрите также cofiles.sh ############################################################### # Установка RCS (Revision Control System) # Инсталлируйте программы RCS -- появятся команды co, ci, rcslog # Создайте домашний каталог RCS, куда Вы поместите репозиторий # исходного кода. Выполните $RCSDIR=/home/rcs_version_control # Задайте переменную окружения RCSDIR=/home/rcs_version_control # в файле $HOME/.profile. Так: # export RCSDIR=/home/rcs_version_control # Создайте структуру каталогов в $RCSDIR и занесите туда все # ваши файлы с помощью ci. Смотрите "man ci" # Теперь создайте связь из Вашего домашнего каталога со своим # проектом в $RCSDIR # cd $HOME # mkdir $HOME/myproject # cd $HOME/myproject # и запустите следующий скрипт чтобы получить все файлы и дерево # каталогов: # cotree.sh # Данный скрипт создаст целое дерево исходного кода в домашнем # каталоге пользователя и будет иметь мягкую ссылку на каталоги # RCS. Каждый пользователь запустит этот скрипт в своем домашнем # каталоге. ############################################################### check_out_directory() { # Корневой каталог RCS (Revision Control System) # подобно RCSDIR=/home/rcs_version_control RCSDIR=$1 DIRNAME=$2 # Заданный каталог должен существовать в корневом каталоге RCS if [ "$DIRNAME" = "" -o ! -d $RCSDIR/$DIRNAME ]; then print "\nКаталог DIRNAME=$DIRNAME не существует!!" print "\nЗавершение программы... и выход...\n" exit fi mkdir -p $DIRNAME ln -s $RCSDIR/$DIRNAME/RCS $DIRNAME ( cd $DIRNAME # Неудача, если имя_файла=sample,vv что в RCS # будет RCS/sample,vv,v # ls RCS | cut -d',' -f1 | xargs co # Используем сопоставление с концом имени $, как ниже # Используем ls RCS/* во избежание прибавления к # именам ./ и ../ #ls RCS/* | cut -d'/' -f2 | sed -e's/,v$//g' | xargs co if [ -d RCS ]; then ls RCS/* | cut -d'/' -f2 | sed -e's/,v$//g' | \ while read ii do #echo "ii is : $ii" if [ -f "RCS/$ii,v" ]; then co $ii fi done fi ) } # Корневой каталог RCS (Revision Control System) # подобно RCSDIR=/home/rcs_version_control if [ "$RCSDIR" = "" -o ! -d $RCSDIR ]; then print "\nКаталог RCSDIR=$RCSDIR не существует!!" print "\nЗавершение программы... и выход...\n" exit fi #echo "rcsdir is : $RCSDIR" # Если передан аргумент-каталог, то извлекаем все файлы # только для этого каталога и выходим. if [ "$1" != "" ]; then (cd $RCSDIR; find $1 -type d -print ) | while read DIRNAME do #echo DIRNAME=$DIRNAME #DIRNAME=c_src # Передай корневой каталог RCS и имя каталога относительно # корневого каталога RCS tmpaa=` basename $DIRNAME ` if [ "$tmpaa" != "RCS" ]; then check_out_directory $RCSDIR $DIRNAME fi done else (cd $RCSDIR; find * -type d -print ) | while read DIRNAME do echo DIRNAME=$DIRNAME #DIRNAME=c_src # Передай корневой каталог RCS и имя каталога относительно # корневового каталога RCS tmpaa=` basename $DIRNAME ` if [ "$tmpaa" != "RCS" ]; then check_out_directory $RCSDIR $DIRNAME fi done fi |
#!/bin/ksh # cofiles.sh (Скрипт оболочки для извлечения файлов) # cofiles.sh - Извлечь все файлы из RCS в текущий каталог # Смотрите также cotree.sh и "man rcsclean" if [ ! -d RCS ]; then print "\nКаталог RCS не существует!!" print "\nЗавершение программы... и выход...\n" exit fi #echo "No. of args = " $# " and all args " $@ while true do print -n "\n\nИзвлечь все файлы в режиме чтения-записи? <y/n> [n]: " read ans if [ "$ans" = "" -o "$ans" = "n" -o "$ans" = "N" ]; then ans="N" break elif [ "$ans" = "y" -o "$ans" = "Y" ]; then ans="Y" break else print "\nОшибочный ввод! Попробуйте снова!!" fi done #echo "The ans is : " $ans if [ $# -eq 0 ]; then # "ls RCS" терпит неудачу в случае имя_файла=sample,vv в RCS/sample,vv,v # ls RCS | cut -d',' -f1 | xargs co # Используем сопоставление с концом имени $, как ниже if [ "$ans" = "Y" ]; then ls RCS | sed -e's/,v$//g' | xargs co -l else ls RCS | sed -e's/,v$//g' | xargs co fi elif [ $# -eq 1 ]; then if [ -f "RCS/$1,v" ]; then # Здесь, в этом случае $1 будет подобен dbalter.sql, # а не db*.sql... #echo "One arg, no. of args = " $# " and all args " $@ if [ "$ans" = "Y" ]; then co -l "$1" else co "$1" fi else # Для случая, когда $1=db*.sql и нет db*.sql в # текущем каталоге #echo "No files... no. of args = " $# " and all args " $@ tmpaa="RCS/$1,v" # будет вроде RCS/db*.sql,v ls $tmpaa | \ while read ii do #echo "ii is : $ii" if [ "$ans" = "Y" ]; then co -l "$ii" else co "$ii" fi done fi else for ii in $@ do #echo "ii is : $ii,v" if [ "$ans" = "Y" ]; then co -l "$ii" else co "$ii" fi done fi |
#!/bin/ksh # ciall.sh (Скрипт оболочки для фиксации файлов) # ciall.sh - Загрузка всех файлов текущего каталога в RCS # Данный скрипт очень полезен для загрузки огромного количества # новых файлов в RCS. Экономит время, избегая необходимости # набора "описания" для каждого файла # Для файлов уже в RCS, выполняет обычную команду check-in # Чтобы преобразовать имена файлов в нижний регистр, # воспользуйтесь следующей техникой; используйте "tr", # смотрите "man tr" #ls * | \ #while read ii #do # jj=`echo $ii | tr [A-Z] [a-z] ` # echo "ii is : $ii" # echo "jj is : $jj" # mv $ii $jj #done if [ ! -d RCS ]; then print "\nКаталог RCS не существует!!" print "\nСоздаю каталог RCS...\n" mkdir RCS fi print "\n\nВНИМАНИЕ: это не лог-сообщение!" print "Пожалуйста, введите описание (будет использовано для" print -n "всех фиксируемых файлов): " read description #find * -prune -type f | # Количество аргументов нулевое или больше.... if [ $# -eq 0 ]; then listoffiles="*" else listoffiles="$@" fi find $listoffiles -prune -type f | while read ii do #echo $ii if [ -f "RCS/$ii,v" ]; then #print "The file $ii already in RCS" ci -m"$description" $ii else #print "The file $ii is new file" ci $ii << EOF $description EOF fi done |