2012-01-14 2 views
4

У меня есть папка, которая является оформлением репозитория SVN. Файлы в этой папке меняются очень часто, новые файлы создаются и старые файлы удаляются.Заключить все в SVN Repo

Как я могу легко зафиксировать все изменения в репозитории на удаленном сервере svn? Обычно мне сначала нужно было выдать svn delete [all deleted files and directories recursivly], затем svn add [all added files and directories recursivly], а затем svn ci для фиксации. Может ли это быть автоматизировано?

Я думал о создании bash-скрипта, который анализирует svn status, но должно быть лучшее решение ?!

Важно одно: свойства svn-ignore НЕ должны игнорироваться.

+0

Я не знаю, есть ли лучший способ (я не могу думать об одном), но это не звучат как особенно длинный или трудный сценарий для написания. –

+0

У нас была аналогичная ситуация с файлами [Adobe Robohelp] (http://www.adobe.com/products/robohelp.html). Я смог сделать все, чтобы удалить все/добавить все дела, но это создало большой беспорядок в нашем журнале svn. Мы сделали zip-файлы Robohelp и просто зафиксировали zip-файл. Это сделало изменения в нашем репозитории единым файлом, что сделало нашу историю более терпимой. Полностью добавление и удаление целого каталога делает невозможным выполнение различий и т. Д. Поэтому я не думал, что мы потеряли что-либо, зашифровав все в одном файле и только совершив это. –

ответ

4

По крайней мере, для удаления задачи синтаксического анализа svn status это решение, но это может быть сделано очень быстро:

svn delete $(svn status | sed -e '/^!/!d' -e 's/^!//') 

Сложение также может быть сделано таким же образом:

svn add $(svn status | sed -e '/^?/!d' -e 's/^?//') 

-или - еще более просто:

svn add . --force 

кстати: Оба указаны svn add com mands учитывают ваши свойства svn:ignore и не добавляют проигнорированные файлы.

1

Для ответа на вопрос DerVO я написал следующий скрипт, который сначала удаляет все файлы, а затем добавляет все новое. Для целей savety удаления-команда запрашивает для каждого файла (потому что svn delete физически удаляет файл)

#!/bin/bash 

HERE=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) 
PROG="${0##*/}" 

cd $HERE 
svn status | grep ^\! | sed 's/^\!\s*//' | tr '\n' '\0' | xargs -0 -n 1 -pr svn remove 
svn status | grep ^\? | sed 's/^\?\s*//' | tr '\n' '\0' | xargs -0 -n 1 -pr svn add 
svn commit -m "Work of `date`" 
svn up 
+0

Было бы лучше иметь svn в качестве первого шага и остановить скрипт, если есть статус ошибки (например, конфликт). – mc0e

Смежные вопросы