1. заходим в папку с рабочей копией проекта (если его нет – сначала надо сделать чекаут транка)
2. в эту папку мы скопировали файлы/папки нужной нам иерархии которые необходимо добавить в систему контроля версий
Если проект изначально пустой – т.е. кто-то за вас создал пустой svn-репозиторий и вам необходимо добавить туда все файлы проекта – план действий тот же – делаем чекаут пустого проекта и добавляем в папку весь свой проект.
Рекурсивное добавление всех файлов и папок в систему контроля версий svn:
3. svn add –force * –auto-props –parents –depth infinity -q
после чего синхронизируем локальную копию с рабочей:
4. svn commit
5 comments
Skip to comment form
Всё бы ничего, да только добавляются абсолютно все файлы. А как бы сделать так, чтобы команда считалась со значением свойства svn:global-ignores и ему подобных?
[решено]
Не буду здесь полностью приводить результат решения (под Windows), так как не претендую на его оптимальность, опишу лишь свои идеи, к нему приведшие:
1. С помощью команды svn propget с параметрами –recursive –depth infinity –show-inherited-props можно получить значения свойств svn:global-ignores и svn:ignore, в которых как раз хранятся исключения при обработке файлов.
2. Конфигурационный файл config содержит секцию [miscellany] с параметром global-ignores, которому через пробел задаются маски игнорируемых файлов, например, *.ReSharper* *.cache* *.suo *.vs?scc *.scc *.ncb *.pdb *.pch bin obj TestResults _ReSharper*.
3. Команда svn add поддерживает параметр –config-dir после которого можно указать локальную директорию с конфигурационными файлами (в том числе и config), но у меня она почему-то отрабатывает не на всех рабочих копиях и иногда не считается с настройками глобального игнорирования. Поэтому мной затем, как раз для таких случаев, используется
4. Команда svn revert с параметрами –recursive –depth infinity куда я передаю маски игнорируемых файлов, разделённые пробелом.
5. После этого пишется скрипт, автоматизирующий предыдущие пункты, и добавляется в виде ловушки на начало фиксации (start commit hook). Я использую TortoiseSVN, в котором это задаётся в настройках Скрипты ловушек.
6. В результате непосредственно перед попыткой фиксации изменений рабочей копии в репозитории выполняется созданный скрипт, который автоматически добавляет все неверсионированные файлы в рабочей копии (кроме исключённых по маскам) под контроль версий. В совокупности с TortoiseSVN получаем, что они по умолчанию будут отмечены галочками в диалоге фиксации, что на мой взгляд очень удобно и даже вызывает недоумение в отсутствии такой возможности среди стандартных функций клиента или даже сервера.
Author
Спасибо за информацию.
но я лично давно сторонник гита 🙂
Ну может быть и мы до него когда-нибудь доберёмся:)
А пока поправьте, пожалуйста, ссылки в моём предыдущем посте, я видимо забыл тэги позакрывать. Ну а этот пост можно и не публиковать.
Спасибо!
Спасибо! Жаль, однако, что самому нельзя редактировать свои посты.
Текст ссылки svn.c.propget нужно заменить на svn propget. Аналогично confarea.opts.config на config.
P.S. А именно сюда я решил писать, так как именно с приведённого здесь простого решения и начались мои изыскания, приведшие к успешному решению задачи добавления новых файлов под версионный контроль с учётом настроенных исключений. Спасибо, что сподвигли!