Найти файлы, не добавленные в Subversion - PullRequest
18 голосов
/ 13 октября 2010

Следующая проблема становится все более распространенной:

  • Есть несколько разработчиков, работающих над проектом, который включает новые файлы (обычно изображения)
  • Все говорят, что все проверено, и мы замораживаем разработку. Без нашего ведома есть изображения, которые не были зарегистрированы. Пользователь не замечает отсутствующие файлы, потому что они новые, а не извлекаются, поэтому svn выглядит хорошо
  • Код скомпилирован и развернут (извините, нет команды QA)
  • На следующий день клиент сообщает нам об отсутствующих изображениях
  • технический директор читает нам акт беспорядков

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

Я надеюсь написать небольшую программу на C #, чтобы все могли ее запустить перед развертыванием. Я хочу выяснить, какие файлы в каталоге проекта (или один из его subdir.s, рекурсивно) не были добавлены в Subversion. В идеале я также хотел бы исключить элементы, которые были активно добавлены в список игнорирования.

Мы используем TortoiseSVN с хостом и клиентами Windows.

Как программно обнаружить не добавленные файлы?

Самая близкая вещь, которую мне удалось найти, это это , говорящее об использовании svn status | grep -e ^?, но это похоже на команду Unix.

Ответы [ 6 ]

14 голосов
/ 13 октября 2010
svn status | grep -e ^?

Это команда unix, но я уверен, что если вы выполните коммит из Tortoise, вы сможете увидеть новые файлы с вопросительным знаком, которые не контролируются SVN

10 голосов
/ 18 октября 2010

Этот вопрос помечен как tortoisesvn, поэтому я предполагаю, что ваша команда использует TortoiseSVN в качестве клиента. Как подсказал @ Джо Энос , TortoiseSVN отображает неверсионные файлы, которые не соответствуют записям в svn:ignore. Интересно, может ли помочь добавление еще одного инструмента, поскольку команда уже должна проверять неверсированные файлы с помощью TortoiseSVN.

В противном случае программа на C # выглядит излишней для поиска неверсионных файлов в рабочем каталоге SVN. Как предложил @ Josh Kelley , вы можете просто использовать клиент командной строки SVN (например, CollabNet или Slik SVN ) и grep.

Вы также можете использовать команду findstr, доступную в командной строке Windows:

svn status | findstr "^?"
7 голосов
/ 13 октября 2010

Код скомпилирован и развернут (простите, нет команды QA)

Разве это не настоящая проблема здесь? Если вы отправляете непроверенный код клиенту, то, конечно, первым, кто обнаружит какие-либо проблемы, будет клиент. Возможно (в дополнение к решению этой конкретной проблемы) вам нужно добавить хотя бы некоторые базовые автоматизированные (или ручные) функциональные тесты в процесс сборки, когда-то между моментом, когда код компилируется и передается клиенту.

6 голосов
/ 13 октября 2010

Вы можете использовать SharpSvn для этого и написать что-то вроде:

SvnClient client = GetClient();

client.Status(workingCopyPath, (o, e) =>
{
    if(e.LocalContentStatus == SvnStatus.NotVersioned)
    {
        Console.WriteLine("Not versioned: " + e.FullPath);
    }
});

Edit: , это также будет учитывать ваш файл игнорирования и svn:ignore свойства.

1 голос
/ 13 октября 2010

Вы можете установить клиент командной строки CollabNet Subversion , затем выполнить его команду svn в качестве подпроцесса, направить ее ввод в вашу программу и найти строки, в которых ? является их первымсимвол (указывает на неизвестность / не отмечен в Subversion и не игнорируется).Вы можете использовать клиент командной строки CollabNet вместе с TortoiseSVN.

Это то же самое, что делает svn status | grep -e ^?, но это не зависит от инструментов Unix.

В качестве альтернативы, вы можете просто установить Cygwin и полный спектр инструментов Unix в вашем распоряжении.

0 голосов
/ 19 января 2016

Также вы можете изменить одну настройку, которая будет отображать папки с новыми добавленными файлами с изменениями.

Настройки-> Значок наложения-> Показать наложение для неверсированного элемента

Щелкните правой кнопкой мыши в папке, затем перейдите в TortoiseSVN - Настройки.Нажмите на «Значок наложения».С правой стороны - «Неверсионные файлы помечают родительскую папку как измененную»

Это работает на windows7, не пробовали с другими ОС

...