SVN: Могу ли я скопировать подмножество файлов в новый тег?

В моем багажнике репо у меня есть каталог unit-tests, который я не хочу использовать в своих тегах выпуска. Что я делал, так это копировал ствол в новый тег, а затем удалял unit-tests. Это нормально? Это кажется неправильным, потому что для пометки каждого выпуска требуется две версии. Есть ли способ исключить каталог из копии svn?

Например. У меня есть:

/trunk/unit-tests
/trunk/dir1
/trunk/file1
/trunk/file2

И я хочу создать:

/tags/release_123/dir1
/tags/release_123/file1
/tags/release_123/file2

Обычно я использую клиенты Tortoise/Eclipse, но при необходимости могу использовать его.


person Steve Clay    schedule 02.07.2009    source источник
comment
Модульные тесты идут вместе с кодом. Я не могу придумать ни одной причины, почему вам нужно сделать снимок кода, но не модульные тесты.   -  person Wim Coenen    schedule 02.07.2009
comment
Извините, модульный тест был просто в качестве примера. На самом деле есть несколько утилит, к которым разработчики могут захотеть получить доступ, но они не входят в официальные выпуски. Моя теория заключалась в том, что теги выпуска должны быть идентичны выпускам .zip.   -  person Steve Clay    schedule 02.07.2009
comment
У вас может быть какой-то файл сценария/рецепта сборки, который создает официальный выпуск .zip и также помещает его в SVN. По крайней мере, для скомпилированных языков, таких как Java, исходное дерево никогда не будет похоже на дерево выпуска.   -  person Thilo    schedule 03.07.2009


Ответы (2)


Вы можете сделать это с помощью программы svnmucc, предоставленной subversion (включена в сборки Windows, начиная с SVN1.5). Этот небольшой инструмент собирает несколько svnactions в один коммит. однако вам нужно создать папку назначения раньше. Невозможно создать папку и скопировать содержимое внутри за одну транзакцию: вот пример:

svn mkdir -m "creating a tag" http://your.serv.er/svn/repo/tags/release_123
svnmucc cp HEAD http://your.serv.er/svn/repo/trunk/dir1 http://your.serv.er/svn/repo/tags/release_123 \
cp HEAD http://your.serv.er/svn/repo/trunk/file1 http://your.serv.er/svn/repo/tags/release_123 \
cp HEAD http://your.serv.er/svn/repo/trunk/file2 http://your.serv.er/svn/repo/tags/release_123 -m "creating tag Part II" 

Вы также можете использовать привязки perl/python/ruby или svnkit(java) для выполнения этой задачи, но я не могу предоставить исходный код для этого.

person Peter Parker    schedule 03.07.2009

Я не думаю, что вы можете.

Но зачем вообще нужно удалять каталог unit-test? Он не занимает лишнего места в репозитории, на самом деле он занимает больше места, если вы его удалите (из-за лишнего коммита).

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

person Thilo    schedule 02.07.2009