Làm cách nào tôi có thể xóa tất cả các thay đổi trong thư mục làm việc SVN của mình?


195

Tôi có một thư mục làm việc SVN. Tôi đã thực hiện một số thay đổi trong thư mục đó, và nó hiển thị trong svn status. Nhưng có cách nào để tôi loại bỏ tất cả các thay đổi của mình trong đó và chỉ cần lấy mọi thứ từ thân cây bằng dòng lệnh không?

Câu trả lời:


274
svn revert -R .
svn up

Điều này sẽ hoàn nguyên đệ quy thư mục hiện tại và mọi thứ trong đó và sau đó cập nhật lên phiên bản mới nhất.


2
Lưu ý rằng điều này không hoạt động với bên ngoài (dường như chúng bị bỏ qua).
cic

86

Tôi đã sử dụng kết hợp các câu trả lời của người khác để đưa ra giải pháp này:

Hoàn nguyên các thay đổi SVN cục bộ bình thường

svn revert -R .

Xóa mọi thay đổi khác và hỗ trợ xóa các tệp / thư mục có khoảng trắng, v.v.

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

Đừng quên lấy các tệp mới nhất từ ​​SVN

svn update --force

Cảm ơn rất nhiều Shaize, đây là chiếc sed thanh lịch nhất, ... ống tôi đã thấy cho đến nay :) Đặc biệt là quan tâm đến việc bỏ qua.
bắt nạt

Hoạt động như một lá bùa. Cảm ơn!
Niilo Keinänen

28
svn revert -R .
svn cleanup . --remove-unversioned

Nó không xóa các tệp *. Class, v.v.
Trismegistos

2
nếu bạn cũng muốn xóa các tập tin bị bỏ qua-svn cleanup . --remove-ignored
Kip

14

Nếu bạn không có thay đổi, bạn luôn có thể thực sự kỹ lưỡng và / hoặc lười biếng và làm ...

rm -rf *
svn update

Nhưng, không thực sự, đừng không làm điều đó trừ khi bạn đang thực sự chắc chắn rằng tùy chọn nuke-từ-không gian là những gì bạn muốn !! Điều này có lợi thế là cũng thu được tất cả các bản dựng, tệp tạm thời và những thứ mà SVN bỏ qua.

Giải pháp đúng hơn là sử dụng lệnh hoàn nguyên:

svn revert -R .

-R gây ra lật đổ để lặp lại và hoàn nguyên mọi thứ trong và bên dưới thư mục làm việc hiện tại.


Tôi thường sử dụng thủ thuật này, nhưng với SVN 1.7, nơi siêu dữ liệu chỉ được lưu trữ trong thư mục gốc WC, đây không còn là giải pháp sạch nữa. Ví dụ, các tập tin bị xóa vẫn bị xóa.
Bart van Heukelom

8
svn nuke-from-space
Jason Swett

9

Không có câu trả lời nào ở đây đúng như những gì tôi muốn. Đây là những gì tôi nghĩ ra:

# Recursively revert any locally-changed files
svn revert -R .

# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
    perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
    tr '\n' '\0' | xargs -0 rm -rf

Đã thử nghiệm trên Linux; có thể hoạt động trong Cygwin, nhưng dựa vào (tôi tin) một phần mở rộng dành riêng cho GNU cho phép xargs phân tách dựa trên '\0'thay vì khoảng trắng.

Ưu điểm của lệnh trên là nó không yêu cầu bất kỳ hoạt động mạng nào để đặt lại hộp cát. Bạn nhận được chính xác những gì bạn đã có trước đó, và bạn mất tất cả các thay đổi của bạn . (từ chối trách nhiệm trước khi ai đó đổ lỗi cho tôi về việc mã này phá hủy công việc của họ) ;-)

Tôi sử dụng tập lệnh này trên một hệ thống tích hợp liên tục, nơi tôi muốn đảm bảo rằng bản dựng sạch sẽ được thực hiện sau khi chạy một số thử nghiệm.

Chỉnh sửa : Tôi không chắc điều này hoạt động với tất cả các phiên bản Subversion. Không rõ nếu svn statuslệnh luôn được định dạng nhất quán. Sử dụng có nguy cơ của riêng bạn, như với bất kỳ lệnh nào sử dụng rmlệnh mền như vậy .


7

svn hoàn nguyên sẽ hoàn tác mọi thay đổi cục bộ bạn đã thực hiện


5

Bạn có thể sử dụng lệnh sau để hoàn nguyên tất cả các thay đổi cục bộ:

svn st -q | awk '{print $2;}' | xargs svn revert

Tôi nhận được thông báo lỗi "Không đủ đối số" cho svn hoàn nguyên
thông tư

4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

Sẽ xóa bất kỳ tập tin đã được sửa đổi. Tôi dường như nhớ có vấn đề với hoàn nguyên khi các tập tin và thư mục có thể đã được thêm vào.



0

Nếu bạn đang ở trên windows, vòng lặp for sau sẽ hoàn nguyên tất cả các thay đổi không được cam kết thực hiện cho không gian làm việc của bạn:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

Nếu bạn muốn xóa tất cả các thay đổi không được cam kết và tất cả các đối tượng không được đảo ngược, nó sẽ yêu cầu 2 vòng lặp:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)
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.