2008-10-10 18 views
9

Tôi có một kịch bản xây dựng tự động phát triển tại nhà dưới dạng tệp lô DOS. Trong một phần của kịch bản đó, tôi kiểm tra (với "svn checkout") một phần của kho SVN của chúng tôi bao gồm một loạt các công cụ của bên thứ ba được sử dụng trong các dự án của chúng tôi. Tập tin batch này thực hiện khá tốt trong một thời gian dài, nhưng bây giờ mọi người đã kiểm tra rất nhiều lông tơ (tài liệu, mã mẫu, v.v.) vào khu vực bên thứ ba và phần kiểm tra của tập lệnh này đã chậm hơn rất nhiều. Tôi muốn giảm thiểu điều này bằng cách chỉ kiểm tra những thứ chúng tôi cần - hầu hết là các tệp dll trong trường hợp của chúng tôi. Vì vậy, câu hỏi của tôi là: cách tốt nhất để kiểm tra một kho lưu trữ SVN được lọc bởi phần mở rộng tập tin là gì?Thanh toán SVN được lọc theo phần mở rộng của tệp?

Tôi không thấy bất kỳ cách rõ ràng nào để thực hiện việc này trong trợ giúp svn. Tôi có một thư viện tiện ích .NET bao bọc svn.exe theo một số cách, và tôi đã nghĩ đến việc mở rộng nó để chỉ lấy nội dung phù hợp với các phần mở rộng quan tâm của tôi. Nhưng tôi muốn sử dụng một phương pháp dễ dàng hơn hoặc hiện có nếu một phương pháp tồn tại.

+0

Địa chỉ này quá địa phương hóa. Câu hỏi là đề cập đến bên thứ ba svn thêm – AlxVallejo

+0

@AlxVallejo Không, không phải vậy. Nó đề cập đến svn.exe. –

Trả lời

21

Điều này là có thể: bạn có thể svn checkout một thư mục trống và sau đó svn update filename cho mỗi tệp mà bạn làm muốn.

kịch bản của bạn có thể làm điều gì đó như:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. ống mà kết quả thông qua một bộ lọc mà loại bỏ các phần mở rộng tập tin bị cấm, ví dụ grep
  4. lặp trên danh sách này được lọc mới và svn update --parents mỗi file

Điều đó sẽ cho kết quả mong muốn của bạn một bản sao làm việc mà không tập tin nhất định hoặc phần mở rộng tập tin.

Tất nhiên, đó cũng là vấn đề mà bạn đề cập đến “mọi người [kiểm tra] trong rất nhiều lông tơ” nhưng đó là vấn đề riêng biệt.

+1

Bạn cũng có thể muốn xem xét hỗ trợ lật đổ của kiến: http://subclipse.tigris.org/svnant/svn.html – tonyo

+1

việc thực hiện giao diện này như thế nào? – Pup

+2

Tôi đã cố gắng thực hiện cách tiếp cận này bản thân mình nhưng tôi nghĩ rằng tôi đang làm sai. Tôi đang nhận được xung đột đường bị bỏ qua. – aaaantoine

0

Bạn không thể chỉ xem một vài tệp cụ thể - bạn chỉ có thể kiểm tra toàn bộ thư mục. Bạn có thể sắp xếp lại các tổ chức của những gì bạn đang kiểm tra, hoặc bạn chỉ có thể sao chép một bản sao làm việc từ một nơi khác và cập nhật.

3

Như tôi đã nói here, chỉ có một lựa chọn xây dựng vào SVN bản thân: Một tính năng mới trong SVN 1,5 gọi thưa thớt thanh toán, tuy nhiên bạn chỉ có thể chọn thanh toán trên cấp độ thư mục, do đó bạn phải sắp xếp các tập tin bạn làm không cần trong một thư mục khác.

+2

Cảm ơn bạn đã chỉ ra Thư mục thưa thớt - chúng thực sự là tính năng mạnh mẽ. Đối với tất cả các http://bit.ly/99Nblk quan tâm là chương có liên quan từ svn-book. –

+0

Vì vậy, nói cách khác, không có cách nào để lọc một thanh toán svn bằng phần mở rộng. – AlxVallejo

-3

Cách đơn giản nhất và chính xác để thực hiện việc này: KHÔNG LÀM VIỆC!

Nếu có một số thư rác trong thư mục của bên thứ ba nơi có giả sử là các tệp .dll cần phải thanh toán - hãy loại bỏ crap đó vào một vị trí khác! Nó không thuộc về đây.

0

Đối với một thực hiện cụ thể powershell của câu trả lời từ Michael Hackner, hãy thử một cái gì đó như:

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) } 

trường hợp sử dụng cụ thể của tôi ở đây là tìm một loạt các tập tin có tên tương tự (trong trường hợp này * special.xml) và bán phá giá tất cả chúng vào một thư mục duy nhất, với các tên cơ bản duy nhất. Tôi đã sử dụng một tập tin trung gian để lưu trữ toàn bộ danh sách repo, nhưng điều này tất cả có thể được inlined là tốt nếu đó là tốt hơn cho bạn.

0

Tôi vừa thử cách tiếp cận được trình bày bởi Michael Hackner. Dưới đây là việc thực hiện cho một hệ thống DOS. Lưu ý rằng bạn phải kiểm tra thư mục trống trước khi chạy tập lệnh này.

@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" 
) 
Các vấn đề liên quan