Как написать командный файл для обновления файлов, которые были зафиксированы на сервере

Я веб-разработчик. Я редактирую файлы в локальной рабочей копии svn на моем собственном компьютере, наш сервер разработки - это общий диск через самбу, а корневой каталог сервера также является рабочей копией, я хочу использовать клиентский обработчик svn post-commit для автоматического обновления рабочей копии на сервере всякий раз, когда разработчик фиксирует код. Я обнаружил, что два пакетных файла могут делать это правильно, один использует команда subversion, в другом используется Tortoise SVN команда, но проблема заключается в обновлении пакетного файла вся рабочая копия, кроме измененных файлов, что очень медленно, часто занимает одну или две минуты. Поэтому я думаю, что это может быть быстрее, если я могу обновлять только измененные файлы. Или mybe, что лучше сделать пакетный файл для ssh на сервере и обновлять напрямую, а не через samba? И как это сделать?

Извините за мой плохой английский, я буду очень признателен за любую помощь.


person treblam    schedule 14.06.2011    source источник


Ответы (2)


Вы можете сделать следующие шаги:
1. Используйте команду svnlook, чтобы узнать, какие файлы были изменены.

svnlook changed REPOSITORY NAME  
  1. Получите вывод команды в файл.
  2. Прочтите этот файл динамически и загрузите его в команду обновления SVN.

Я могу рассказать вам, как это сделать в Linux, но не понимаю командных файлов.

person Nitin Srivastava    schedule 30.07.2011

У меня была аналогичная проблема, но с Linux Server, на котором размещался SVN. Может быть, вы можете взять здесь какую-нибудь подсказку и изменить ее в соответствии с вашей системой Windows.

POST_COMMIT

#!/bin/sh
wget http://localhost/update_svn.php

update_svn.php

<?php
$output = shell_exec('/media/disk3/velsvn/projects/hooks/svn_update_step1.sh');
echo "<pre>$output</pre>";
?>

svn_update_step1.sh

    ssh -i /media/d/mykey/id_rsa velsvnuser@localhost /media/disk3/velsvn/projects/hooks/svn_update_step2.sh

    svn_update_step2.sh

#!/bin/sh
cd /media/disk3/velsvn/projects/hooks
rm -f filelist
rm -f log
whoami >> log

    svnlook dirs-changed /media/disk3/velsvn/projects/  | sed "s/^..//" | awk '{ print substr( $0, 9 ) }' >> /media/disk3/velsvn/projects/hooks/filelist; sed -i -e 's#^#/media/disk2/www/htdocs#' filelist; cat /media/disk3/velsvn/projects/hooks/filelist | xargs /usr/bin/svn up -N >> /media/disk3/velsvn/projects/hooks/log

Примечание. 1. / media / d / mykey / id_rsa - это ключ, сгенерированный для доступа по SSH. Это гарантирует, что система не будет ждать, пока пользователь предоставит пароль для подключения к SVN, а также выполнит сценарии оболочки. 2. Файл POST-COMMIT и файлы оболочки sh1 и sh2 получили + x mod, чтобы их можно было выполнить.

Не стесняйтесь комментировать этот пост и предлагать более удобное решение. Все, что я знаю прямо сейчас, это решение работает :)

person Nitin Srivastava    schedule 17.08.2011