Làm cách nào để lấy danh sách tất cả các tệp chưa được phiên bản từ SVN?


80

Đôi khi bạn đang phát triển và bạn quyết định cam kết, quên rằng bạn đã tạo một vài tệp trong dự án của mình. Sau đó, một vài ngày sau, bạn của bạn lấy bản dựng của bạn ra khỏi Subversion và phàn nàn rằng một số tệp dường như bị thiếu. Bạn nhận ra, ah tào lao, tôi đã quên thêm các tệp đó!

Làm cách nào để lấy danh sách các tệp không thuộc quyền kiểm soát phiên bản từ Subversion để tôi chắc chắn rằng mình đã thêm mọi thứ vào kho lưu trữ?

Câu trả lời:


106

Sử dụng svn statuslệnh:

svn status | grep ^?

Các tệp không được tạo phiên bản được biểu thị bằng dấu? ở đầu dòng.

Nếu bạn thấy rằng bạn luôn có một số tệp cụ thể không nên thêm vào kho lưu trữ (ví dụ: tệp nhị phân được tạo), bạn nên thiết lập thuộc svn:ignoretính trên thư mục chứa để các tệp này không tiếp tục hiển thị khi sử dụng svn status.


4
Cá nhân tôi luôn "svn diff" trước "svn ci", nhưng vì điều đó đôi khi hơi chậm, tôi luôn "svn stat" trước "svn diff", điều đó thật tiện lợi vì sau đó tôi không quên thêm đồ :)
ephemient

10
Nếu bạn có nhiều tệp chưa được phiên bản mà bạn muốn thêm, hãy làm như sau: svn st | grep ^? | awk '{print $2} | xargs svn add Điều này đầu tiên sẽ tìm thấy các tệp chưa được phiên bản, awk sẽ chỉ in mục thứ hai trong dòng (tức là đường dẫn tệp) và xargs sẽ đặt đường dẫn này thành đối số của svn thêm vào.
nhị nguyên_

7
Thiếu một dấu ngoặc kép ở cuối lệnh awk. Lệnh phải là:svn st | grep ^? | awk '{print $2}' | xargs svn add
jplandrain

46

Nếu một số tệp đã được ignorethêm vào trạng thái của chúng, chúng sẽ không hiển thị trong svn status. Có thể bạn sẽ cần:

svn status --no-ignore

1
Cũng hữu ích cho các tệp nhị phân mà trong thiết lập của tôi dường như bị bỏ qua bởi trạng thái svn theo mặc định. Tôi có thể không biết một số cài đặt thực hiện điều này, nhưng sử dụng --no-ignore đã giúp tôi trong trường hợp này.
Andy Weinstein

Đây phải là câu trả lời được chấp nhận vì câu trả lời đã chọn không hoạt động trong trường hợp của tôi (đối với tệp nhị phân trong môi trường linux)
Asqan

15

Nếu bạn đang chạy trên Windows, bạn có thể làm điều gì đó tương tự như câu trả lời của Greg Hewgill bằng cách sử dụng PowerShell.

(svn stat) -match '^\?'

Điều này có thể được mở rộng khá dễ dàng để tìm tất cả các tệp không phiên bản và bị bỏ qua và xóa chúng.

(svn stat "--no-ignore") -match '^[I?]' -replace '^.\s+','' | rm

Hy vọng điều đó hữu ích cho ai đó!


1
Điều này () -mathđược gọi là như thế nào?
Pavel Petrov


1

Bạn có thể sử dụng lệnh này để liệt kê tất cả các đường dẫn cho các tệp không có phiên bản:

svn status | awk '/^?/ {print $2}'

Phần đầu tiên sẽ thực hiện một svn status, và sau đó nó sẽ chuyển hướng đầu ra đến AWK sẽ thực hiện bộ lọc đơn giản "ký tự đầu tiên phải là '?'" Sau đó nó sẽ in ra tham số thứ hai "là đường dẫn tệp".

svn statussẽ luôn không in các tệp bị bỏ qua. Bạn có thể thêm tệp hoặc đường dẫn bằng cách thêm đường dẫn đó bằng

svn propset svn:ignore "PATH OR PATERN"

Điều này dường như nhận được tất cả các kết quả của svn status, không chỉ các tệp không có phiên bản. Tôi tin rằng lệnh phải svn status | awk '/^\?/ {print $2}'thoát khỏi ?, vì bộ lọc là một biểu thức regex.
KymikoLoco
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.