Как написать командный файл для обновления файлов, которые были зафиксированы на сервере - PullRequest
1 голос
/ 14 июня 2011

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

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

Ответы [ 2 ]

1 голос
/ 17 августа 2011

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

POST_COMMIT

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

update_svn.php

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

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, чтобы их можно было выполнить.

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

1 голос
/ 30 июля 2011

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

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

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

...