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?
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:
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.
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:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
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.
svn nuke-from-space
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 status
lệ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 rm
lệnh mền như vậy .
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"
)