Я использую этот пост-фиксационный скрипт (это не моя работа, у меня оно есть отсюда).Сценарий пост-фиксации не экспортирует файлы, начинающиеся с «@»
#!/bin/bash
REPOS="$1"
REV="$2"
# A - Item added to repository
# D - Item deleted from repository
# U - File contents changed
# _U - Properties of item changed; note the leading underscore
# UU - File contents and properties changed
# Files and directories can be distinguished, as directory paths are displayed with a trailing "/" character.
LOOK=/usr/bin/svnlook
SVN=/usr/bin/svn
DEV=/var/www/my_web
cd /var/tmp/svn
for changes in `$LOOK changed $REPOS | awk '{print $1 "=" $2;}'`;
do
len=${#changes}
idx=`expr index "$changes" =`;
directory=${changes:$idx};
action=${changes:0:$idx-1};
if [ ${changes:len-1} = '/' ]
then
case "$action" in
"A") \
mkdir --mode=775 -p $DEV/$directory;
chown www-data:www-data $DEV/$directory;
chmod 775 $DEV/$directory;
;;
"D") \
rmdir $DEV/$directory;
;;
esac
else
case "$action" in
"A"|"U"|"UU") \
$SVN export --force --non-interactive -r HEAD -q file://$REPOS/$directory;
BASE=`basename $directory`;
DIR=`dirname $directory`;
chown www-data:www-data $BASE;
chmod 775 $BASE;
mkdir --mode=775 -p $DEV/$DIR;
cp -f --preserve=ownership $BASE $DEV/$DIR;
unlink $BASE;
;;
"D") \
rm -f $DEV/$directory;
;;
esac
fi
done
exit 0
Скрипт работает отлично - добавление/удаление файлов, папок, настройки разрешения, но если я совершаю файл с именем, например, «@ layout.latte» Я могу видеть этот файл в SVN дерева на моем сервере (так совершают работы отлично), но сценарий post-commit не копирует этот файл в папку my/var/www/my_web.
Кто-нибудь знает, почему? Большое спасибо! Я везде искал, но мне не повезло.
EDIT: Он также не работает для файлов типа "[email protected]". Это из-за «@», но я не знаю, как это исправить. Я думаю, что что-то вроде ускользания может помочь, но я действительно не «парень-баш» :)
Можете ли вы дать мне пример кода? Я использую TortoiseSVN для передачи файлов с моего ПК в мой SVN-репозиторий на моем сервере с Debian, а затем скрипт пост-фиксации SVN. Я не знаю, где в этой процедуре есть какой-то URL. Благодаря! –
Нет, вам нужно сделать это в скрипте hook, который вы разместили выше. 'file: // $ REPOS/$ directory' - ваш URL. – alroc
Ну, я просто после 'file: // $ REPOS/$ directory;' добавьте '@' like 'file: // $ REPOS/$ directory @;' и он работает 'Большое спасибо! :) –