문제

DOS 배치 파일의 형태로 집에서 재배 한 자동 빌드 스크립트가 있습니다. 그 스크립트의 일부에서, 나는 프로젝트에 사용되는 많은 타사 물건을 포함하는 SVN 저장소 섹션을 ( "SVN Checkout"과 함께) 체크 아웃합니다. 이 배치 파일은 오랫동안 꽤 잘 수행되었지만 이제는 사람들이 3 자 영역으로 많은 보풀 (문서, 샘플 코드 등)을 체크인 했으며이 스크립트의 체크 아웃 부분은 로트가 느려졌습니다. 필요한 내용 만 확인하여 이것을 완화하고 싶습니다. 대부분의 경우 DLL 파일. 그래서 내 질문은 이것입니다 : 파일 확장자로 필터링 된 SVN 저장소를 확인하는 가장 좋은 방법은 무엇입니까?

SVN 도움으로 이것을하는 명백한 방법을 보지 못했습니다. Svn.exe를 어떤 방식으로 랩핑하는 .NET 유틸리티 라이브러리가 있으며, 관심 확장과 일치하는 컨텐츠 만 검색하기 위해 이것을 확장 할 생각을하고있었습니다. 그러나 나는 하나가 존재하는 경우 더 쉽게 또는 기존 방법을 사용하는 것을 선호합니다.

도움이 되었습니까?

해결책

이것은 가능합니다 : 당신은 할 수 있습니다 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 각 파일

그러면 특정 파일이나 파일 확장자가없는 작업 사본의 원하는 결과를 제공합니다.

물론,“많은 보풀에있는 사람들 [체크인]”에 대해 언급하는 문제도 있지만 그것은 별도의 문제입니다.

다른 팁

내가 말했듯이 여기, SVN 자체에 대한 하나의 옵션 빌드 만 있습니다 : SVN 1.5의 새로운 기능 드문 드문 결제, 그러나 디렉토리 수준에서만 체크 아웃 만 선택할 수 있으므로 다른 디렉토리에서 필요없는 파일을 정렬해야합니다.

특정 파일 만 확인할 수는 없습니다. 전체 폴더 만 확인할 수 있습니다. 체크 아웃하는 내용의 조직을 재 배열하거나 다른 곳에서 작업 사본을 복사하고 업데이트 할 수 있습니다.

PowerShell의 응답 구현 마이클 해커, 다음과 같은 것을 시도하십시오.

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)을 찾아 본질적으로 고유 한 이름을 가진 단일 폴더에 모두 덤프하는 것입니다. 나는 중간 파일을 사용하여 전체 리포 목록을 저장했지만, 이것이 당신에게 더 나은 경우에도 인쇄 될 수 있습니다.

방금 Michael Hackner가 제시 한 접근 방식을 시도했습니다. 아래는 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