2008-09-23 28 views
298

"Không thể kiểm tra một tệp. Mức độ kiểm tra tốt nhất bạn có thể thực hiện ở cấp thư mục".Thanh toán một tệp từ Subversion

Làm cách nào để khắc phục sự cố này khi sử dụng Subversion?

Chúng tôi có thư mục này trong Subversion nơi chúng tôi lưu giữ tất cả hình ảnh của mình. Tôi chỉ muốn kiểm tra một tập tin (hình ảnh) từ đó. Thư mục này thực sự lớn và có rất nhiều thứ khác mà tôi không cần bây giờ.

+0

Bạn có thể làm theo cách khác. Đăng nhập vào máy chủ sản xuất và 'svn up' vào thư mục cục bộ của bạn trên máy tính của bạn. – Neocortex

Trả lời

373

Câu trả lời đơn giản là bạn svn export tệp thay vì kiểm tra.

Nhưng đó có thể không phải là điều bạn muốn. Bạn có thể muốn làm việc trên tập tin và kiểm tra nó trở lại, mà không cần phải tải GB rác mà bạn không cần.

Nếu bạn có Subversion 1.5+, sau đó làm một kiểm thưa thớt:

svn checkout <url_of_big_dir> <target> --depth empty 
cd <target> 
svn up <file_you_want> 

Đối với phiên bản cũ của SVN, bạn có thể được hưởng lợi từ những điều sau đây:

  • Thanh toán thư mục sử dụng một phiên bản trở lại quá khứ xa xôi, khi nó ít đầy rác bạn không cần.
  • Cập nhật tệp bạn muốn, để tạo bản sửa đổi hỗn hợp. Điều này hoạt động ngay cả khi tệp không tồn tại trong bản sửa đổi mà bạn đã kiểm tra.
  • Lợi nhuận!

Một thay thế (ví dụ: nếu thư mục có quá nhiều rác ngay từ bản sửa đổi mà nó được tạo) là tạo URL-> Bản sao URL của tệp bạn muốn vào vị trí mới trong kho lưu trữ (một cách hiệu quả đây là một nhánh hoạt động của tệp). Kiểm tra thư mục đó và thực hiện các sửa đổi của bạn.

Tôi không chắc liệu bạn có thể hợp nhất bản sao đã sửa đổi của mình hoàn toàn trong kho lưu trữ mà không có bản sao làm việc của mục tiêu - tôi chưa bao giờ cần đến. Nếu vậy thì hãy làm điều đó.

Nếu không thì không may là bạn có thể phải tìm một người khác đã kiểm tra toàn bộ thư mục và yêu cầu họ làm điều đó. Hoặc có thể vào thời điểm bạn đã sửa đổi, phần còn lại của nó sẽ tải xuống xong ...

+3

Giải pháp rất thông minh, cảm ơn. –

+13

Giải pháp thực sự đơn giản là truy cập kho lưu trữ bằng trình duyệt web. – dolmen

+9

@dolmen - Giả sử không cần sửa đổi tệp, có thể (và giả sử một giao diện web đang chạy cho kho lưu trữ đó). Tôi sử dụng SVN dòng lệnh, vì vậy đối với tôi, nó đơn giản hơn để sử dụng 'svn export' hơn là sử dụng giao diện web, nếu tôi biết tập tin nào tôi muốn. Người hỏi đã sử dụng SVN, vì vậy tôi đoán nó phụ thuộc vào những gì khách hàng và liệu khách hàng đó làm cho nó dễ dàng để sử dụng 'svn export'. Tôi tìm thấy giao diện web tốt hơn cho trình duyệt hơn 'svn ls', mặc dù :-) –

50

Sử dụng svn cat hoặc svn export.

Đối với điều đó, bạn không cần tìm nạp thư mục làm việc, nhưng bạn sẽ không thể thực hiện bất kỳ thay đổi nào bạn thực hiện. Nếu bạn cần thay đổi và cam kết chúng, bạn cần một thư mục làm việc, nhưng bạn không phải lấy nó hoàn toàn. Kiểm tra bản sửa đổi nơi thư mục vẫn còn/hầu như trống, và sau đó sử dụng 'svn cat' để trích xuất tệp từ HEAD.

+0

'svn cat svn: //.../my_file.txt'was chính xác những gì tôi đang tìm kiếm. Tôi làm việc trong kho 'svn: //' only (no 'http: //') và có giao diện websvn mới nhất không cung cấp tải xuống tệp thô (hoặc chúng tôi đã định cấu hình sai hoặc bị mù) . Dễ dàng thực hiện theo cách này hơn 'checkout' +' up' chỉ để tải xuống tệp. – ribamar

102

Hãy thử svn export thay vì svn checkout. Điều đó làm việc cho các tệp đơn lẻ.

Lý do giới hạn là checkout tạo bản sao làm việc, chứa siêu thông tin về kho lưu trữ, sửa đổi, thuộc tính, v.v ... Siêu dữ liệu đó được lưu trữ trong thư mục con có tên '.svn'. Và các tệp đơn không có thư mục con.

+2

Lưu ý: Các phiên bản cũ của 'svn' sẽ không làm xuất tệp đơn lẻ. –

+4

Đây là phương pháp cao cấp nếu bạn chỉ muốn lấy phiên bản mới nhất của một tập lệnh cụ thể như là một phần của triển khai, hoặc một cái gì đó. –

12

Nếu bạn muốn xem readme.txt trong kho của bạn mà không kiểm tra nó ra:

$ svn mèo http://svn.red-bean.com/repos/test/readme.txt
Đây là một tập tin README. Bạn nên đọc điều này.

Mẹo: Nếu bản sao làm việc của bạn đã cũ (hoặc bạn có thay đổi địa phương) và bạn muốn xem phiên bản HEAD của một tập tin trong bản sao làm việc của bạn, svn mèo sẽ tự động lấy các HEAD sửa đổi khi bạn cung cấp cho nó một con đường:

$ cat foo.c
tệp này ở địa phương bản sao làm việc của tôi và có những thay đổi mà tôi đã thực hiện.

$ svn cat foo.c
Bản sửa đổi mới nhất từ kho lưu trữ!

Source

+0

Bạn cũng có thể trực tiếp sử dụng bất kỳ ứng dụng HTTP nào. Trình duyệt web của bạn hoặc một công cụ dòng lệnh như 'curl' hoặc' wget'. – dolmen

4

tôi chỉ muốn duyệt nó và xuất tập tin duy nhất. Nếu bạn có quyền truy cập HTTP, chỉ cần sử dụng trình duyệt web để tìm tệp và lấy nó.

Nếu bạn cần đưa nó trở lại sau khi chỉnh sửa, điều đó có thể hơi tẻ nhạt hơn, nhưng tôi chắc chắn có thể có chức năng svn import ...

2

Nếu bạn chỉ muốn một file mà không cần thông tin phiên bản sử dụng

svn export <URL> 
4

Tới repo trình duyệt nhấn phải chuột lên tập tin và sử dụng 'Save As', tôi đang sử dụng TortoiseSVN mặc dù.

2

Với Subversion 1.5, bạn có thể kiểm tra (tất cả) các tệp của thư mục mà không cần kiểm tra bất kỳ thư mục con nào (các cờ --depth khác nhau). Không hoàn toàn những gì bạn yêu cầu, nhưng là một hình thức "ít hơn tất cả."

3
cd C:\path\dir 
svn checkout https://server/path/to/trunk/dir/dir/parent_dir--depth empty 
cd C:\path\dir\parent_dir 
svn update filename.log 

(Sửa filename.log)

svn commit -m "this is a comment." 
1

Sử dụng séc thưa thớt ra kỹ thuật, bạn có thể kiểm tra một tập tin cụ thể mà đã được kiểm tra ra hoặc tồn tại ... với một thủ thuật đơn giản:

Sau khi thanh toán cấp cao nhất của kho lưu trữ bằng cách sử dụng tùy chọn 'chỉ mục này', trong Windows explorer, bạn PHẢI nhấp chuột phải vào tệp bạn cần cập nhật lần đầu tiên; chọn Repo Browser trong menu ngữ cảnh; tìm tệp đó AGAIN trong trình duyệt kho lưu trữ và nhấp chuột phải. Bây giờ bạn sẽ thấy "cập nhật mục để sửa đổi" trong menu ngữ cảnh.

Tôi không chắc đó có phải là tính năng không có giấy tờ hay chỉ đơn giản là lỗi. Nó đã cho tôi một giờ mở rộng sau giờ làm việc để cuối cùng tìm thấy thủ thuật này. Tôi đang sử dụng TortoiseSVN 1.6.2.

8

Giải pháp tương đương TortoiseSVN của câu trả lời được chấp nhận (Tôi đã viết điều này trong một tài liệu nội bộ cho công ty của tôi khi chúng tôi mới chấp nhận SVN) theo sau. Tôi nghĩ sẽ hữu ích khi chia sẻ ở đây:

Kiểm tra một tệp duy nhất: Phiên bản phụ không hỗ trợ thanh toán của một tệp duy nhất, nó chỉ hỗ trợ thanh toán cấu trúc thư mục. (Tham khảo: http://subversion.tigris.org/faq.html#single-file-checkout). Điều này là do với mỗi thư mục được kiểm tra dưới dạng bản sao làm việc, siêu dữ liệu liên quan đến sửa đổi/sửa đổi tệp được lưu trữ dưới dạng thư mục ẩn nội bộ (.svn/_svn). Điều này hiện không được hỗ trợ (v1.6) cho các tệp đơn lẻ.

Chiến lược được đề xuất thay thế: Bạn sẽ chỉ phải thực hiện phần thư mục thanh toán một lần, sau đó bạn có thể trực tiếp truy cập và thanh toán các tệp đơn lẻ của mình. Thực hiện thanh toán thưa thớt của thư mục mẹ và cấu trúc thư mục. Thanh toán thưa thớt về cơ bản chỉ kiểm tra cấu trúc thư mục mà không cần điền các tệp nội dung. Vì vậy, bạn kiểm tra chỉ cấu trúc thư mục và không cần phải kiểm tra tất cả các tập tin như là mối quan tâm. tham khảo: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

Bước 1: Tiến hành để trình duyệt kho

Bước 2: Nhấp chuột phải vào thư mục mẹ trong kho chứa tất cả các tập tin mà bạn muốn làm việc trên và Chọn Checkout.

Bước 3: Trong cửa sổ bật lên mới, đảm bảo rằng thư mục thanh toán trỏ đến vị trí chính xác trên máy tính cục bộ của bạn. Cũng sẽ có một trình đơn thả xuống có nhãn “độ sâu kiểm tra”. Chọn "Chỉ mục này" hoặc "Trẻ em ngay lập tức, bao gồm cả thư mục" tùy thuộc vào yêu cầu của bạn. Tùy chọn thứ hai được khuyến khích là, nếu bạn muốn làm việc trên thư mục lồng nhau, bạn có thể trực tiếp tiến hành lần sau nếu không, bạn sẽ phải làm theo toàn bộ thủ tục này một lần nữa cho thư mục lồng nhau.

Bước 4: Thư mục gốc hiện có sẵn trong thư mục được chọn cục bộ của bạn và hiện đang được giám sát với SVN (thư mục ẩn ".svn" hoặc "_svn"). Trong kho lưu trữ ngay bây giờ, nhấp chuột phải vào tệp duy nhất mà bạn muốn kiểm tra một mình và chọn tùy chọn "Cập nhật mục để sửa đổi". Bây giờ, một tệp có thể được làm việc và kiểm tra lại vào kho lưu trữ.

Tôi hy vọng điều này sẽ hữu ích.

0

Vấn đề này được bao phủ bởi:

http://subversion.tigris.org/issues/show_bug.cgi?id=823

Có một kịch bản kèm theo cho phép bạn kiểm tra một tập tin duy nhất từ ​​svn, thực hiện thay đổi, và cam kết những thay đổi về kho, nhưng bạn có thể 't chạy "svn up" để kiểm tra phần còn lại của thư mục. Nó đã được thử nghiệm với svn-1.3, 1.4 và 1.6.

4

Steve Jessop's answer không hoạt động đối với tôi. Tôi đọc các tập tin trợ giúp cho SVN và nếu bạn chỉ có một hình ảnh bạn có thể không muốn kiểm tra lại nó trừ khi bạn đang làm Photoshop, vì vậy xuất khẩu là một lệnh tốt hơn thanh toán vì nó không phiên bản (nhưng đó là nhỏ).

--depth ARG không nên trống nhưng file để có được các tập tin trong thư mục ngay lập tức.Vì vậy, bạn sẽ nhận được tất cả các trường, không chỉ một trường, nhưng trống trả về không có gì từ kho lưu trữ.

svn co --depth files <source> <local dest> 

hoặc

svn export --depth files <source> <local dest> 

Đối với các câu trả lời khác, mèo cho phép bạn đọc các nội dung đó là tốt chỉ cho văn bản, không phải hình ảnh của tất cả mọi thứ.

+1

Điểm của '--depth empty' là các tệp khác không được kiểm tra, và sau đó bạn có thể lấy một tệp duy nhất với' svn up '. Với 'svn export', không cần phải làm điều này, chỉ cần chỉ định tệp. –

+0

@reemrevnivek - bạn nói đúng. cũng câu hỏi vừa được yêu cầu cho một tập tin duy nhất, điều này làm việc mà không cần kiểm tra ra khỏi toàn bộ tập tin cấu trúc thư mục ngay cả khi nó là sản phẩm nào. – Vass

5

Bản cập nhật trong trường hợp những gì bạn thực sự cần có thể được đề cập đến bằng cách có tệp được bao gồm trong thanh toán của một thư mục khác.

Vì SVN 1.6 bạn có thể tạo file externals, một loại liên kết svn. Điều đó có nghĩa là bạn có thể có một thư mục được phiên bản khác bao gồm một tệp duy nhất. Cam kết thay đổi tập tin trong thanh toán của thư mục này cũng có thể.

Nó rất đơn giản, kiểm tra các thư mục mà bạn muốn bao gồm các tập tin, và chỉ cần thêm một thuộc tính vào thư mục

svn propedit svn:externals . 

với nội dung như thế này:

file.txt /repos/path/to/file.txt 

Sau khi bạn cam kết này, tệp sẽ xuất hiện trong các lần kiểm tra thư mục trong tương lai. Về cơ bản nó hoạt động, nhưng có một số hạn chế như được mô tả trong tài liệu liên kết ở trên.

1

Tôi muốn thanh toán một tệp duy nhất vào một thư mục không phải là một phần của bản sao làm việc.

Hãy tải tệp tại URL sau: http://subversion.repository.server/repository/module/directory/myfile

svn co http://subversion.repository.server/repository/module/directory/myfile /**directoryb** 

Vì vậy, tôi đã kiểm tra ra các thư mục nhất định có chứa các tập tin mục tiêu tôi muốn để có được vào một thư mục giả, (nói etcb cho URL kết thúc với /etc).

Sau đó, tôi làm trống tệp .svn/entries từ tất cả các tệp của thư mục đích mà tôi không cần, chỉ để lại tệp tôi muốn. Trong tệp .svn/entries này, bạn có một bản ghi cho từng tệp với các thuộc tính của nó, vì vậy chỉ để lại bản ghi liên quan đến tệp bạn muốn nhận và lưu.

Bây giờ bạn chỉ cần sao chép sau đó '' .svn '' vào thư mục sẽ là "bản sao làm việc" mới. Sau đó, bạn chỉ cần:

cp .svn /directory 
cd /directory 
svn update myfile 

Bây giờ thư mục thư mục là dưới sự kiểm soát phiên bản. Đừng quên xóa thư mục directoryb chỉ là một '' bản sao làm việc tạm thời ''.

+0

Đây không phải là việc thanh toán thưa thớt gì? Bạn thực sự không nên hack các tập tin trong thư mục .svn theo cách thủ công. –

+0

Có lẽ nhưng nó đã giải quyết được vấn đề đúng cách. Tôi cho rằng, đó là cách quản lý phiên bản nên hoạt động, cũng có khả năng xử lý các tệp như phần mở rộng của các thư mục. Hãy thử nó và cho tôi biết có gì sai với logic. Iwould đề xuất nhóm phát triển subversion để mở rộng tiện ích svn với tính năng này, nó sẽ giải quyết các vấn đề của tất cả các chàng trai đã trả lời chủ đề này. – hendergassler

+1

Nhưng họ đã có, đây là kiểm tra thưa thớt! –

1

Đỗ một cái gì đó như thế này:

mkdir <your directory>/repos/test 

svn cat http://svn.red-bean.com/repos/test/readme.txt > <your directory>/repos/test/readme.txt 

Về cơ bản các ý tưởng là tạo ra các thư mục mà bạn muốn lấy file từ SVN. Sử dụng lệnh svn cat và chuyển hướng đầu ra đến cùng một tệp được đặt tên. Theo mặc định, con mèo sẽ đổ thông tin về stdio.

5

Bạn có thể làm điều đó trong hai bước:

  1. Checkout kho SVN trống chỉ với thông tin meta:

    $ cd /tmp 
    
    $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql 
    
  2. Run svn up để cập nhật tập tin nhất định:

    $ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql 
    
1

Nếu bạn chỉ muốn xuất tệp, và bạn sẽ không cần phải cập nhật nó sau này, bạn có thể làm điều đó mà không cần phải sử dụng lệnh SVN.

Sử dụng Trình duyệt kho TortoiseSVN, chọn tệp, nhấp chuột phải và sau đó chọn "Sao chép URL vào clipboard". Dán URL đó vào trình duyệt của bạn và sau khi đăng nhập, bạn sẽ được nhắc tải xuống tệp.

Bằng cách này bạn cũng có thể chọn bản sửa đổi mong muốn và tải xuống phiên bản cũ hơn của tệp.

Lưu ý rằng điều này là hợp lệ nếu máy chủ SVN của bạn có giao diện web.

-1

Kể từ khi không có câu trả lời khác làm việc cho tôi, tôi đã làm nó sử dụng hack này:

$ cd /yourfolder 
svn co https://path-to-folder-which-has-your-files/ --depth files 

này sẽ tạo ra một thư mục địa phương mới mà chỉ có các tập tin từ các con đường hẻo lánh. Sau đó, bạn có thể tạo liên kết tượng trưng cho các tệp bạn muốn có tại đây.

+0

OP hỏi về 'svn co' của một tệp để tránh toàn bộ thư mục chứa toàn bộ tệp hình ảnh. Ngoài ra, việc thêm một liên kết tượng trưng chỉ có thể thêm vào sự phức tạp, di chuyển từ thư mục tạm thời có thể hoạt động, nhưng bạn vẫn phải kiểm tra toàn bộ thư mục ảnh chỉ với một hình ảnh. @ steve-jessop có ý tưởng đúng –

+0

@ChrisMarotta OP hỏi câu hỏi 9 năm trước. Không ai ở đây trả lời OP. Đây là một chủ đề chung cho loại vấn đề này, và nó không có gì để làm với OP ban đầu nữa. Mọi người đến đây để tìm ra giải pháp cho vấn đề của riêng họ. Và khi họ đọc nó, một số người trong số họ sẽ ở trong tình huống của tôi, nơi đây là giải pháp thích hợp duy nhất. Đó là lý do tại sao tôi đăng nó. –

Các vấn đề liên quan