Поиск файлов, не добавленных в subversion

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

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

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

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

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

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

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

Ответы

Ответ 1

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

SvnClient client = GetClient();

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

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

Ответ 2

svn status | grep -e ^?

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

Ответ 3

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

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

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

svn status | findstr "^?"

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Щелкните правой кнопкой мыши в папке, затем выберите TortoiseSVN - Настройки. Нажмите "Наложение значков". При правильной проверке - "Неверсированные файлы отмечают родительскую папку как измененную"

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