Проверка SVN отфильтрована по расширению файла?
-
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
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, которые необходимо оформить, удалите эту хрень в другое место! Это не принадлежит здесь так или иначе.