Частичный экспорт Subversion - PullRequest
       23

Частичный экспорт Subversion

4 голосов
/ 03 сентября 2008

У меня несколько интересная ситуация с развитием. Клиент и сервер развертывания находятся внутри брандмауэра без доступа к серверу Subversion. Но разработчики находятся за пределами брандмауэра и могут использовать сервер Subversion. Прямо сейчас решение, которое я разработал, состоит в том, чтобы обновить мою локальную копию кода и затем извлечь самые последние обновленные файлы, используя UnleashIT.

Вопрос в том, как получить только обновленные файлы из Subversion, чтобы их можно было физически транспортировать через брандмауэр и поместить на сервер развертывания.

Меня не беспокоит попытка изменить настройку брандмауэра или поиск более простого способа получить доступ к серверу Subversion изнутри брандмауэра. Мне просто интересно, как получить частичный экспорт из хранилища самых последних измененных файлов.

Есть ли другие предложения?

Ответ найден: В дополнение к ответу, помеченному как Ответ, я также нашел здесь следующее, чтобы сделать это из TortoiseSVN:

из http://svn.haxx.se/tsvn/archive-2006-08/0051.shtml

* select the two revisions
* right-click, "compare revisions"
* select all files in the list
* right-click, choose "export to..." 

Ответы [ 8 ]

2 голосов
/ 04 ноября 2008

svn export не принимает диапазон ревизий, попробуйте.

Возможное решение - получить список измененных файлов с помощью:

svn diff --summarize -rXXX http://svn/...

, а затем экспортируйте каждый из них.

1 голос
/ 05 сентября 2008

Я нашел rsync чрезвычайно полезным для синхронизации деревьев каталогов в нескольких системах. Если у вас есть доступ оболочки к вашему серверу с рабочей станции разработки, вы можете регулярно проверять код локально и запускать rsync, который будет передавать только те файлы, которые были изменены на сервер.

(Это предполагает Unix-подобную среду на ваших рабочих станциях. Cygwin будет работать нормально.)

cd deploy
svn update
rsync -a . server:webdir/

Ваш вопрос звучит так, как будто у вас фактически нет прямого доступа к сети с рабочих станций разработки на сервер, и что вы действительно ищете, так это способ получения Subversion информации о том, какие файлы были изменены. svn export поддерживает аргумент, позволяющий вам проверять только файлы, которые изменились между конкретными ревизиями. Из справки svn:

  -r [--revision] arg      : ARG (some commands also take ARG1:ARG2 range)
                             A revision argument can be one of:
                                NUMBER       revision number
                                '{' DATE '}' revision at start of the date
                                'HEAD'       latest in repository
                                'BASE'       base rev of item's working copy
                                'COMMITTED'  last commit at or before BASE
                                'PREV'       revision just before COMMITTED

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

svn export -r xxxx:HEAD http://svn/

Затем просто скопируйте содержимое каталога deploy на свой сервер поверх существующих файлов.

Это не будет обрабатывать удаленные файлы, что может оказаться проблематичным в некоторых средах.

1 голос
/ 04 сентября 2008

Крюки Subversion, похоже, имеют многообещающие перспективы. Но, будучи относительно не информированным о том, как написать скрипт, как бы я извлек файлы, которые были зафиксированы, и отправил их по FTP, поддерживая структуру каталогов?

Если бы я мог это сделать, то кто-то внутри брандмауэра может вытащить файлы на сервер развертывания, и мы были бы в порядке.

1 голос
/ 04 сентября 2008

Так что, если я правильно понимаю ...

Допустим, у вас есть хранилище, которое выглядит так:

/
|+-DIR1
|   |- FILEa
|   |- FILEb
|+-DIR2
|   |- FILEc
|   |- FILEd
|- FILEe
|- FILEf

И скажем, вы обновляете файлы FILEa, FILEc и FILEf и фиксируете их обратно в хранилище. Тогда то, что вы хотите экспортировать из репозитория - это структура, которая выглядит следующим образом:

/
|+-DIR1
|   |- FILEa
|+-DIR2
|   |- FILEc
|- FILEf

Это правильно?

0 голосов
/ 12 марта 2010

Если вы пометите редакцию, это может помочь github svn-diff-export

0 голосов
/ 04 сентября 2008

Вы просто хотите, чтобы люди, которые находятся за брандмауэром, имели доступ к последним файлам, переданным в Subversion, верно?

Не могли бы вы написать svn hook-скрипт , который использует какой-либо метод (возможно, scp или ftp) для отправки файлов в удаленное местоположение во время их фиксации?

0 голосов
/ 03 сентября 2008

Вы можете попробовать поиграть с командой svnadmin dump , которая поставляется с двоичными файлами Subversion. Вы можете использовать эту команду, чтобы выгрузить весь репозиторий в файл, только определенную ревизию или диапазон ревизий. Затем используйте svnadmin load для загрузки dump-файла в новый, чистый репозиторий.

Не идеальное решение, поскольку оно работает с хранилищем, а не с отдельными файлами.

0 голосов
/ 03 сентября 2008

Вы не предоставляете информацию о том, что разрешено через брандмауэр. Я не знаком с UnleashIT.

Полагаю, у вас может быть скрипт, который экспортирует из SVN в папку на сервере SVN. Затем скрипт архивирует экспортированные файлы. Затем вы можете транспортировать ZIP-файл по своему усмотрению и распаковать его на сервер развертывания.

TortoiseSVN поддерживает прокси-серверы, поэтому вы можете использовать один из них со стороны клиента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...