Проверка SVN отфильтрована по расширению файла? - PullRequest
11 голосов
/ 10 октября 2008

У меня есть собственный автоматизированный скрипт сборки в виде командного файла DOS. В части этого скрипта я проверяю (с помощью «svn checkout») раздел нашего SVN-репозитория, который включает в себя кучу сторонних материалов, которые используются в наших проектах. Этот пакетный файл работал довольно хорошо в течение долгого времени, но теперь люди зарегистрировали много пуха (документы, примеры кода и т. Д.) В сторонней области, и часть проверки этого скрипта стала намного медленнее. Я хотел бы смягчить это, проверяя только то, что нам нужно - в основном файлы dll в нашем случае. Итак, мой вопрос заключается в следующем: каков наилучший способ проверить хранилище SVN, отфильтрованное по расширению файла?

Я не видел никакого очевидного способа сделать это в svn help. У меня есть служебная библиотека .NET, которая каким-то образом оборачивает svn.exe, и я собирался расширить ее, чтобы получать только тот контент, который соответствует интересующим меня расширениям. Но я бы предпочел использовать более простой или существующий метод, если он существует.

Ответы [ 6 ]

26 голосов
/ 08 января 2010

Это возможно: вы можете svn checkout пустой каталог, а затем svn update filename для каждого файла, который вы делаете хотите.

Ваш скрипт может сделать что-то вроде:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. Канал, полученный в результате фильтрации, удаляющей запрещенные расширения файлов, например, grep
  4. Перебрать этот новый отфильтрованный список и svn update --parents каждый файл

Это даст желаемый результат рабочей копии без определенных файлов или расширений файлов.

Конечно, есть также проблема, которую вы упоминаете о «людях [проверяющих] в большом количестве пуха», но это отдельный вопрос.

3 голосов
/ 11 октября 2008

Как я уже сказал здесь , в SVN встроена только одна опция: новая функция в SVN 1.5, называемая sparse checkout , однако вы можете выбрать извлечение только на уровне каталога поэтому вам нужно отсортировать ненужные файлы в другом каталоге.

0 голосов
/ 21 апреля 2017

Я только что попробовал подход, представленный Майклом Хакнером. Ниже приведена реализация для системы DOS. Обратите внимание, что перед запуском этого скрипта необходимо извлечь пустую папку.

@echo off

svn list --recursive https://path_to_repository_folder | find /I ".sql" > filelist.txt

REM Specify a custom delim. Otherwise space in filename will be treated as a delimiter.
FOR /F "delims=|" %%i  IN (filelist.txt) DO (
    echo -------------
    echo %%i
    svn update --parents "%%i"
)
0 голосов
/ 07 октября 2015

Для конкретной реализации ответа от Майкл Хакнер попробуйте что-то вроде:

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {$_.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path = $_; Munged = $_.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$($_.Path)" $($_.Munged) }

Мой конкретный пример использования здесь - найти группу файлов с одинаковыми именами (в данном случае * special.xml) и выгрузить их все в одну папку с практически уникальными именами. Я использовал промежуточный файл для хранения всего списка репо, но это также может быть встроено, если это будет лучше для вас.

0 голосов
/ 11 октября 2008

Самый простой и правильный способ сделать это: НЕ ДЕЛАЙТЕ ЭТОГО!

Если в сторонней папке есть какая-то хрень, в которой, как предполагается, находятся файлы .dll, которые необходимо оформить, удалите эту хрень в другое место! В любом случае, он здесь не принадлежит.

0 голосов
/ 10 октября 2008

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

...