Thư mục bỏ qua thanh toán SVN


98

Tôi có thể bỏ qua một thư mục trên svn checkout không? Tôi cần bỏ qua thư mục DOC khi thanh toán tại máy chủ bản dựng của mình.

chỉnh sửa: Bỏ qua bên ngoài không phải là một tùy chọn. Tôi có một số yếu tố bên ngoài mà tôi cần.



Điều này có trả lời câu hỏi của bạn không? Làm cách nào để bỏ qua một thư mục với SVN?
Gautier

Câu trả lời:


104

Bạn không thể trực tiếp bỏ qua các thư mục khi thanh toán, nhưng bạn có thể sử dụng thanh toán thưa thớt trong svn 1.5. Ví dụ:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

Thao tác này sẽ kiểm tra các tệp và thư mục từ thân dự án của bạn vào 'my_checkout', nhưng không lặp lại vào các thư mục đó. Ví dụ:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Sau đó, để tải xuống nội dung của 'bar':

$ cd bar && svn update --set-depth infinity

Lưu ý: có một lỗi trong một số phiên bản 1.5 mà ngăn chặn điều này vớisvn: Shallowing of working copy depths is not yet supported
GCB

79

Có, bạn có thể sử dụng SVN 1.6. Bạn sẽ cần phải kiểm tra trước rồi đánh dấu thư mục để loại trừ rồi xóa thư mục không mong muốn.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

Kể từ bây giờ, bất kỳ bản cập nhật nào đối với bản sao đang hoạt động sẽ không lưu trữ lại thư mục tài liệu.

Xem http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/http://subversion.apache.org/docs/release-notes/1.6.html#sparse- loại trừ thư mục để biết thêm chi tiết.

Tom


2
Đã ủng hộ vì nó giúp tôi không phải kiểm tra một thư mục khổng lồ không liên quan đến công việc của tôi.
dohpaz42

1
Thật tuyệt, cùng với việc dọn dẹp svn, điều này đã giúp tôi tiết kiệm được 12 GiB.
JonnyJD

1
Không phải điều này vẫn kiểm tra mọi thứ ban đầu?
Chủ nghĩa Hoàng gia

9

Với các phiên bản trước 1.5, tôi nhận thấy rằng nếu bạn chỉ kiểm tra thư mục trên cùng và sau đó cập nhật có chọn lọc, từ đó các bản cập nhật chỉ ảnh hưởng đến những gì bạn đã kiểm tra. I E.

svn co -N foo
cd foo
svn up -N bar
svn up

Cờ -N làm cho hoạt động không đệ quy. Ở trên sẽ không kiểm tra bất kỳ thứ gì khác ở cấp độ foo, ví dụ: nói là có thư mục lala, cuối cùng svn up sẽ không kiểm tra thư mục đó mà cập nhật bar.

Nhưng sau đó, bạn có thể svn up lalavà do đó, thêm nó vào thanh toán.

Có lẽ điều này cũng hoạt động với 1,5.


6

Điều này có trong ứng dụng TortoiseSVN 1.7.1 (cũng có thể có sẵn trong một số phiên bản cũ hơn):

  • Kiểm tra SVN -> Chọn URL của kho

  • Nhấp vào "Mục Thanh toán" (dưới Độ sâu thanh toán) và chỉ chọn các thư mục cần thiết!


4

Bạn có thể đặt thư mục tài liệu trong một kho lưu trữ bên ngoài và sau đó sử dụng svn checkout --ignore-externals.


Đây là những gì chúng tôi đã thực hiện để bỏ qua một số thành phần được tạo sẵn trong công việc trước đó.
Mark Bessey

2
Tôi không hiểu external repositorynghĩa là gì. Bạn có thể giải thích nó được không?
Victor

4

Có, Subversion 1.5 có một tính năng gọi là Kiểm tra thưa thớt có thể thực hiện chính xác loại việc này.


2
Từ việc đọc điều đó, có vẻ như việc kiểm tra thưa thớt chỉ giới hạn độ sâu của một lần kiểm tra. Họ không thể bỏ qua một thư mục cụ thể.
John Millikin

Chắc chắn, bạn có thể phải làm thêm một chút công việc, chẳng hạn như giới hạn độ sâu của thư mục mẹ với --depth ngay lập tức, sau đó kiểm tra tất cả các thư mục khác ngoại trừ thư mục bạn muốn bỏ qua. Vấn đề là, các công cụ ở đó nếu bạn cần sử dụng chúng.
Greg Hewgill 11/10/08

Tôi đánh giá cao việc đề cập đến SparseCheckouts và chắc chắn là rất thú vị, nhưng câu trả lời này không giải quyết được câu hỏi ban đầu. Chắc chắn, tôi có thể kiểm tra từng tệp một và điều đó sẽ dẫn đến việc có các bản sao cục bộ của các tệp cụ thể mà tôi muốn, nhưng thật khó chịu khi phải thực hiện từng tệp riêng lẻ. Tôi tin rằng tác giả của câu hỏi này đang hỏi về việc bỏ qua một thư mục cụ thể, không phải độ sâu của thư mục x và cho phép máy tính thực hiện công việc - công việc tương tự bạn đang đề xuất có thể được thực hiện theo cách thủ công.
barrypicker

Các phiên bản 1.6+ cung cấp khả năng bổ sung để bỏ qua các thư mục và kiểm soát chung nhiều hơn về những gì cần bao gồm / loại trừ trong một bản sao đang hoạt động (trong đó v1.5 rất hạn chế trong điều này) svnbook.red-bean.com/en/1.7/svn. advanced.sparsedirs.html
FruitBreak

3

Tôi tìm thấy câu hỏi này để tìm cách kiểm tra các nguồn WebKit trong khi loại trừ các bài kiểm tra hồi quy. Tôi đã kết thúc với những điều sau:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

Lưu ý rằng bạn có thể thay đổi các loại trừ khi bạn thấy phù hợp, nhưng. * Nên bỏ qua thư mục làm việc (đã được cập nhật) và tất cả các thư mục .svn.


đây là ngôn ngữ gì
Pup

đây là những unix lệnh shell (họ cũng có thể được lưu lại và thực hiện như một tập tin script)
mrlem

2

Gần đây tôi đã giải quyết cùng một nhiệm vụ. Ý tưởng là lấy ngay danh sách thư mục / tệp trong kho lưu trữ loại trừ các mục bạn cần, sau đó kiểm tra các thư mục còn lại và cập nhật tệp ngay lập tức nếu có. Đây là giải pháp:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

Thay đổi thư mục làm việc nguồn. Sao chép các lệnh. Dán. Thay đổi URL thích hợp và mẫu loại trừ. Chạy lệnh.

Cảm ơn,


1
Này, 6 năm dành cho các nhà phát triển là gì? Trên dòng cuối cùng của bạn, bạn có $ ubrpath. Bộ đó ở đâu?
D-Klotz

1
@ D-Klotz, cảm ơn bạn, thay vào đó phải là $ rpath, lần lượt được đặt thành đường dẫn kho lưu trữ. <br/> Xin lỗi vì đã trễ một năm
bv.

1

Không, bỏ qua chỉ để thêm tệp.
Bạn có thể sử dụng thanh toán thưa thớt (nếu bạn sử dụng svn 1.5)


1

Như một số người khác đã đề cập, bạn chỉ có thể sử dụng thuộc tính svn: externals và sau đó tùy chọn --ignore-externals khi bạn thanh toán. Tuy nhiên, một điều cần lưu ý là svn: externals không nhất thiết phải tham chiếu đến một kho lưu trữ khác. Nó có thể là một tham chiếu đến một số thư mục khác trong cùng một repo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.