Linux и SVN: нужен скрипт shelll для передачи обновленных файлов на тестовый сервер после обновления svn
Задача / проблема: Мы хотим следовать правильной методологии разработки с использованием SVN. Проекты будут на PHP, сервере Apache и ОС Linux. Процесс должен быть как
- Разработчики работают над кодом на своей локальной копии (локальной машине). Локальная копия связана с репозиторием SVN (наш собственный репозиторий SVN)
- Для каждой выполненной задачи есть фиксация SVN.
- Есть сервер среднего уровня, на котором есть код из того же репозитория SVN. Этот слой используется только для получения обновлений SVN из репозитория и последующей передачи обновленных файлов на тестовый сервер.
Примечание. Существует несколько тестовых серверов для нескольких проектов. Средний уровень будет общим для всех проектов. Целевой тестовый сервер, куда должны быть переданы обновленные файлы, будет решен здесь.
Мне нужна помощь для шага 3.
Как получить / сохранить список всех обновленных файлов для разных проектов. Затем сценарий оболочки для выбора исходного dir(на среднем уровне) и dest dir(тестовый сервер), а затем rsync всех обновленных файлов на тестовом сервере. Все серверы находятся в одной сети.
1 ответ
Я должен согласиться с комментарием H2CO3. Сказав это, можно достичь того, что вам нужно с svn
:
svn merge -r BASE:HEAD --dry-run .
даст вам список всех файлов, которые были обновлены с момента последнего svn update
, С помощью sed
, awk
, или же perl
Затем вы можете легко превратить это в список включения, подходящий для потребления rsync
, Вот еще одна похожая команда, которая может быть полезна, но гораздо более многословна и сложнее для анализа:
svn log -r BASE:HEAD -v
Однако я хотел бы задать вопрос rsync
это правильный инструмент для работы здесь. Почему бы просто не использовать svn
прямо на тестовом сервере? Зачем вам вообще нужен сервер посередине? Вы уже сказали, что все серверы находятся в одной сети, поэтому, возможно, у вас есть дополнительное требование, которое вы не указали?
Наконец, я настоятельно рекомендую вам посмотреть на git-svn
, Есть много хороших вводных статей онлайн, чтобы помочь с этим, и намного больше становится возможным, когда у вас есть git
на кончиках ваших пальцев. Я с радостью использовал git-svn
более года сотрудничества с командой, которая в основном застряла на svn
и они не были бы мудрее, если бы я не сказал им, что я делаю. (Я также в конечном итоге преобразовал их в git
, но это другая история:-)