«

»

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. Leonid

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

    1. Leonid

      [решено]
      Не буду здесь полностью приводить результат решения (под 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. admin

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

        1. Leonid

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

          1. Leonid

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>