Проверка SVN отфильтрована по расширению файла?

StackOverflow https://stackoverflow.com/questions/192810

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

<Ол>
  • svn checkout svn: // путь / к / repos / каталогу - пусто
  • svn list --recursive svn: // path / to / repos / directory
  • Канал, полученный в результате фильтрации, удаляющей запрещенные расширения файлов, например, <Код> Grep
  • Выполните итерацию по этому новому отфильтрованному списку и svn update --parents для каждого файла
  • Это даст желаемый результат рабочей копии без определенных файлов или расширений файлов.

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

    Другие советы

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

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

    Чтобы получить конкретную реализацию ответа от Майкла Хакнера , попробуйте что-то вроде:

    svn ls http://svn-server/src --recursive | Out-File svn.txt
    Get-Content .\svn.txt | where {

    Чтобы получить конкретную реализацию ответа от Майкла Хакнера , попробуйте что-то вроде:

    <*>

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

    .toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path =

    Чтобы получить конкретную реализацию ответа от Майкла Хакнера , попробуйте что-то вроде:

    <*>

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

    ; Munged =

    Чтобы получить конкретную реализацию ответа от Майкла Хакнера , попробуйте что-то вроде:

    <*>

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

    .Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$(

    Чтобы получить конкретную реализацию ответа от Майкла Хакнера , попробуйте что-то вроде:

    <*>

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

    .Path)" $(

    Чтобы получить конкретную реализацию ответа от Майкла Хакнера , попробуйте что-то вроде:

    <*>

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

    .Munged) }

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

    Я только что попробовал подход, представленный Майклом Хакнером. Ниже приведена реализация для системы 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"
    )
    

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top