Kiểm tra một tệp từ Subversion


320

"Không thể kiểm tra một tập tin duy nhất. Mức kiểm tra tốt nhất bạn có thể làm là ở cấp thư mục."

Làm thế nào để tôi khắc phục vấn đề 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ả các hình ảnh của chúng tôi. 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ờ.


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 upvào thư mục địa phương trên máy tính của bạn.
Neocortex

Câu trả lời:


403

Câu trả lời đơn giản là bạn svn exporttập tin thay vì kiểm tra nó.

Nhưng đó có thể không phải là những gì bạn muốn. Bạn có thể muốn làm việc với tệp và kiểm tra lại, mà không phải tải xuống GB rác mà bạn không cần.

Nếu bạn có Subversion 1.5+, thì hãy kiểm tra 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ũ hơn của SVN, bạn có thể được hưởng lợi từ những điều sau đây:

  • Kiểm tra thư mục bằng cách sử dụng một bản sửa đổi trong quá khứ xa xôi, khi nó không đầy rác mà bạn không cần.
  • Cập nhật tệp bạn muốn, để tạo một 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 phiên bản bạn đã kiểm tra.
  • Lợi nhuận!

Một cách khác (ví dụ nếu thư mục có quá nhiều rác ngay từ bản sửa đổi được tạo) là tạo một bản sao URL-> URL của tệp bạn muốn vào một vị trí mới trong kho lưu trữ (đây thực sự là một nhánh hoạt động của tập tin). 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 sau đó bạn có thể hợp nhất hoàn toàn bản sao đã sửa đổi của mình trong kho không mà không có bản sao hoạt động của mục tiêu hay không - tôi chưa bao giờ cần. Nếu vậy thì làm điều đó.

Nếu không thì thật không may, 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 thực hiện các sửa đổi của mình, phần còn lại của nó sẽ hoàn tất tải xuống ...


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.
heo

11
@dolmen - Giả sử không cần sửa đổi tệp, có lẽ (và giả sử 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, svn exportsử dụng giao diện web đơn giản hơn so với sử dụng giao diện web, nếu tôi biết tôi muốn tập tin nào. Người hỏi đã sử dụng SVN, vì vậy tôi đoán nó phụ thuộc vào khách hàng nào và liệu khách hàng đó có làm cho nó dễ sử dụng không svn export. svn lsMặc dù vậy, tôi thấy giao diện web tốt hơn để duyệt hơn :-)
Steve Jessop

2
SmartSVN Client sẽ khóa các tệp riêng lẻ nếu Subversion Server của bạn hỗ trợ nó. Và có các móc yêu cầu kiểm tra phải được thực hiện trước khi tệp nhị phân / tệp thực thi có thể được kiểm tra. Thật không có nghĩa là phải có hai người sửa đổi tiền phạt nhị phân và các thay đổi đó được hợp nhất với nhau. Đây có thể là những tính năng mới không khả dụng khi câu hỏi này được hỏi.
TamusJRoyce

@Tamus: "Nó không thực sự có ý nghĩa" đã đồng ý, nhưng trong các trường hợp tôi mô tả việc hợp nhất chỉ là đưa phiên bản mới trở lại vị trí ban đầu. Không mong đợi rằng tệp nhị phân đã được sửa đổi trong mục tiêu hợp nhất. Vì vậy, bản thân tệp không cần bất kỳ sự "hợp nhất" nào ngoài việc thay thế phiên bản cũ bằng phiên bản mới, đó chỉ là những gì SVN gọi nó và nó ghi lại những thay đổi đến từ đâu để tham khảo trong tương lai. Bạn nói đúng, việc tránh xung đột có thể được thực thi bằng cách khóa tệp trong suốt thời gian.
Steve Jessop

1
TortoiseSVN có thể kiểm tra các tệp riêng lẻ. Tôi tin rằng nó làm điều tương tự đằng sau hậu trường để đạt được điều đó.
Mike Starov

109

Hãy thử svn exportthay vì svn checkout. Điều đó làm việc cho các tập tin duy nhất.

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


2
Hãy cẩn thận: Các phiên bản cực kỳ cũ svnsẽ không xuất tập tin duy nhất.
Mladen Jablanović

5
Đây là phương pháp ưu việt 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 việc triển khai, hoặc một cái gì đó.
william.berg

2
Sự cảnh báo đó đã kéo dài ngay cả vào năm 2011 nhưng các phiên bản cực kỳ cũ có thể làm được svn cat $url_to_file_in_repo > $local_file_name.
cprn

53

Sử dụng svn cathoặc svn export.

Vì thế, 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 thực hiện các thay đổi và cam kết chúng, bạn cần một thư mục hoạt động, nhưng bạn không phải tìm nạp nó hoàn toàn. Kiểm tra bản sửa đổi trong đó thư mục vẫn còn / gần như trống, sau đó sử dụng 'svn cat' để trích xuất tệp từ HEAD.


svn cat svn://.../my_file.txtchính xác là những gì tôi đang tìm kiếm. Tôi làm việc trong một kho lưu trữ svn://duy nhất (không http://) và có vẻ như cá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 đã cấu hình sai hoặc tôi bị mù). Dễ dàng thực hiện theo cách này hơn checkout+ upchỉ để tải xuống một tệp.
ribamar

12

Nếu bạn muốn xem readme.txt trong kho lưu trữ của mình mà không cần kiểm tra:

$ svn cat http://svn.red-bean.com/repose/test/readme.txt
Đây là tệp README. Bạn nên đọc nó.

Mẹo: Nếu bản sao làm việc của bạn đã hết hạn (hoặc bạn có sửa đổi cục bộ) và bạn muốn xem bản sửa đổi CHÍNH của tệp trong bản sao làm việc của mình, mèo svn sẽ tự động tìm nạp bản sửa đổi CHÍNH khi bạn đưa ra đường dẫn:

$ cat foo.c
Tệp này nằm trong bản sao làm việc tại địa phương 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ữ!

Nguồn


Bạn cũng có thể trực tiếp sử dụng bất kỳ máy khách HTTP nào. Trình duyệt web của bạn hoặc công cụ dòng lệnh như curlhoặc wget.
heo

9

Một giải pháp tương đương với 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 áp dụng SVN). Tôi nghĩ rằng nó cũng sẽ hữu ích để chia sẻ ở đây:

Kiểm tra một tệp duy nhất: Subversion không hỗ trợ kiểm tra một tệp duy nhất, nó chỉ hỗ trợ kiểm tra các 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 là bản sao hoạt động, siêu dữ liệu về sửa đổi / sửa đổi tệp được lưu trữ dưới dạng thư mục ẩn bên trong (.svn / _svn). Điều này hiện không được hỗ trợ (v1.6) cho các tệp đơn.

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 đi và kiểm tra các tệp duy nhất của mình. Thực hiện kiểm tra thưa thớt của thư mục mẹ và cấu trúc thư mục. Một kiểm tra thưa thớt về cơ bản chỉ kiểm tra cấu trúc thư mục mà không điền các tệp nội dung. Vì vậy, bạn chỉ kiểm tra các cấu trúc thư mục và không cần kiểm tra TẤT CẢ các tệp như mối quan tâm. Tham khảo: http://tortoisesvn.net/docs/release/TortoirSVN_en/tsvn-dug-checkout.html

Bước 1 : Tiếp tục với trình duyệt kho lưu trữ

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 mà bạn muốn làm việc 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 đúng vị trí trên PC cục bộ của bạn. Cũng sẽ có một menu thả xuống có nhãn sâu kiểm tra chiều sâu. Chọn Chỉ có mặt hàng này Trẻ em hoặc trẻ em ngay lập tức, bao gồm cá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 nghị 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 vào lần tiếp theo nếu không bạn sẽ phải làm lại toàn bộ quy trình này một lần nữa cho thư mục lồng nhau.

Bước 4 : Bây giờ (các) thư mục mẹ sẽ có sẵn trong thư mục được chọn cục bộ của bạn và hiện đang được theo dõi bằng SVN (hiện có một thư mục ẩn .svn và hoặc _svn trực tiếp). Trong kho lưu trữ 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 tùy chọn. Bây giờ các tập tin duy nhất có thể được làm việc và kiểm tra lại vào kho lưu trữ.

Tôi hi vọng cái này giúp được.


8

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

  1. Kiểm tra kho lưu trữ 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. Chạy svn upđể cập nhật tệp được chỉ định:

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

6

Một bản cập nhật trong trường hợp những gì bạn thực sự cần có thể được bảo vệ bằng cách đưa tệp vào kiểm tra thư mục khác.

Kể từ SVN 1.6, bạn có thể tạo các tệp bên ngoài , 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 trong kiểm tra thư mục này cũng có thể.

Rất đơn giản, hãy kiểm tra thư mục bạn muốn bao gồm tệp và chỉ cần thêm 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 điều này, tập tin 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 được liên kết ở trên.


4

Truy cập trình duyệt repo nhấp chuột phải vào tệp và sử dụng 'Lưu dưới dạng', mặc dù tôi đang sử dụng TortoiseSVN.


4
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

(Chỉnh sửa tên tệp.log)

svn commit -m "this is a comment."

4

Câu trả lời của Steve Jessop không hiệu quả với tôi. Tôi đã đọc các tệp trợ giúp cho SVN và nếu bạn chỉ có một hình ảnh thì có lẽ bạn không muốn kiểm tra lại trừ khi bạn đang làm Photoshop, vì vậy xuất khẩu là một lệnh tốt hơn so với thanh toán vì nó không bị đảo ngược (nhưng đó là thứ yếu).

Và ARG --depth không được để trống mà là các tệp để nhận các tệp trong thư mục ngay lập tức. Vì vậy, bạn sẽ nhận được tất cả các lĩnh vực, không chỉ là một, nhưng trống rỗng lợi nhuận từ kho.

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

hoặc là

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 nội dung chỉ tốt cho văn bản, không phải hình ảnh của tất cả mọi thứ.


1
Điểm quan trọng --depth emptylà các tệp khác không nên được kiểm tra và sau đó bạn có thể nhận được một tệp duy nhất với svn up <source/file>. Với svn export, không cần phải làm điều này, chỉ cần chỉ định tệp.
Kevin Vermeer

@reemrevnivek - bạn nói đúng. Vâng, câu hỏi chỉ yêu cầu một tệp duy nhất, điều này không hoạt động mà không cần kiểm tra toàn bộ tệp cấu trúc thư mục ngay cả khi nó trống.
Vass

4

Tôi chỉ cầ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 lấy 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ó một svn importchức năng ...


3

Làm 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, ý tưởng là tạo thư mục mà bạn muốn lấy tệp từ SVN. Sử dụng svn catlệnh và chuyển hướng đầu ra đến cùng một tệp có tên. Theo mặc định, con mèo sẽ kết xuất thông tin trên stdio.


2

Nếu bạn chỉ muốn một tập tin mà không có thông tin sửa đổi, hãy sử dụng

svn export <URL>

2

Với Subversion 1.5, 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 một hình thức "ít hơn tất cả."


2

Sử dụng kỹ thuật kiểm tra thưa thớt, bạn CÓ THỂ kiểm tra một tệp cụ thể đã được kiểm tra hoặc tồn tại ... với một mẹo đơn giản:

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

Tôi không chắc đó là một tính năng không có giấy tờ hay chỉ đơn giản là một lỗi. Tôi phải mất thêm một giờ sau giờ làm việc để cuối cùng tìm ra mánh khóe này. Tôi đang sử dụng TortoiseSVN 1.6.2.


2

Tôi muốn kiểm tra một tập tin 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.

Chúng ta hãy lấy tệp tại URL sau: http: //subversion.reposective.server/reposective/module/directory/myfile

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

Vì vậy, tôi đã kiểm tra thư mục đã cho có chứa tệp mục tiêu mà tôi muốn đến thư mục giả, (giả sử vvb cho URL kết thúc bằng /etc).

Sau đó, tôi đã xóa tệp .svn / mục 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 / mục này , bạn có một bản ghi cho mỗi 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 rồi '' .svn '' vào thư mục sẽ là một "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 được kiểm soát phiên bản. Đừng quên xóa thư mục thư mục chỉ là '' bản sao làm việc tạm thời ''.


Đây không phải là những gì kiểm tra thưa thớt làm gì? Bạn thực sự không nên hack các tệp trong thư mục .svn theo cách thủ công.
Lasse V. Karlsen

Có lẽ nhưng nó đã giải quyết vấn đề đúng. 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 dưới dạng phần mở rộng của các thư mục. Hãy thử nó và cho tôi biết những gì sai với logic. Iwould đề nghị nhóm phát triển lật đổ mở rộng tiện ích svn với tính năng này, nó sẽ giải quyết vấn đề của tất cả những người trả lời chủ đề này.
hendergassler

2

Vì không có câu trả lời nào khác có hiệu quả với tôi nên tôi đã thực hiện bằng cách sử dụng bản hack này:

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

Điều này sẽ tạo một thư mục cục bộ mới chỉ có các tệp từ đường dẫn từ xa. Sau đó, bạn có thể thực hiện một liên kết tượng trưng đến các tập tin bạn muốn có ở đây.


OP đã hỏi về svn comột tệp để tránh toàn bộ thư mục chứa đầy tệp ả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 hình ảnh cho chỉ một hình ảnh. @ steve-jessop đã có ý tưởng đúng
Chris Marotta

2
@ChrisMarotta OP đã đặt câu hỏi 9 năm trước. Không ai ở đây đang trả lời OP. Đây là một chủ đề chung cho loại vấn đề này và nó không liên quan gì đến OP ban đầu nữa. Mọi người đang đến đây để tìm một giải pháp cho vấn đề của chính họ. Và khi họ đọc nó, một và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ó.
Lacho Tomov

1
Tôi rất vui vì câu trả lời này, nó đã giúp tôi
Leos Literak

1

Vấn đề này được bảo vệ bởi:

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

Có một tập lệnh được đính kèm cho phép bạn kiểm tra một tệp từ svn, thực hiện thay đổi và cam kết thay đổi trở lại kho lưu trữ, nhưng bạn không thể 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.


1

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

Sử dụng Trình duyệt kho lưu trữ TortoiseSVN , chọn tệp, nhấp chuột phải và sau đó chọn " Sao chép URL vào bảng tạm ". 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 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.

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.