Sep 12

Как добавить все файлы в svn-репозиторий

1. заходим в папку с рабочей копией проекта (если его нет – сначала надо сделать чекаут транка)
2. в эту папку мы скопировали файлы/папки нужной нам иерархии которые необходимо добавить в систему контроля версий

Если проект изначально пустой – т.е. кто-то за вас создал пустой svn-репозиторий и вам необходимо добавить туда все файлы проекта – план действий тот же – делаем чекаут пустого проекта и добавляем в папку весь свой проект.

Рекурсивное добавление всех файлов и папок в систему контроля версий svn:

3. svn add –force * –auto-props –parents –depth infinity -q

после чего синхронизируем локальную копию с рабочей:

4. svn commit

5 comments

Skip to comment form

  1. Всё бы ничего, да только добавляются абсолютно все файлы. А как бы сделать так, чтобы команда считалась со значением свойства svn:global-ignores и ему подобных?

    1. [решено]
      Не буду здесь полностью приводить результат решения (под 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 получаем, что они по умолчанию будут отмечены галочками в диалоге фиксации, что на мой взгляд очень удобно и даже вызывает недоумение в отсутствии такой возможности среди стандартных функций клиента или даже сервера.

      1. Спасибо за информацию.
        но я лично давно сторонник гита 🙂

        1. Ну может быть и мы до него когда-нибудь доберёмся:)
          А пока поправьте, пожалуйста, ссылки в моём предыдущем посте, я видимо забыл тэги позакрывать. Ну а этот пост можно и не публиковать.
          Спасибо!

            • Leonid on August 1, 2015 at 11:35 am

            Спасибо! Жаль, однако, что самому нельзя редактировать свои посты.
            Текст ссылки svn.c.propget нужно заменить на svn propget. Аналогично confarea.opts.config на config.

            P.S. А именно сюда я решил писать, так как именно с приведённого здесь простого решения и начались мои изыскания, приведшие к успешному решению задачи добавления новых файлов под версионный контроль с учётом настроенных исключений. Спасибо, что сподвигли!

Leave a Reply

Your email address will not be published.