Muốn xóa bản sửa đổi khỏi kho SVN của tôi


33

Các sửa đổi mới nhất trong repo mã của tôi đã bị hỏng và làm mất ổn định ứng dụng của tôi. Tôi muốn trở lại một phiên bản trước đó.

Nhưng tôi không muốn chỉ đơn giản là sử dụng 'hoàn nguyên' trên bản sao làm việc của mình; Tôi thực sự muốn xóa sửa đổi đầu của tôi và một số sửa đổi trước trong repo của tôi, do đó 'hoàn nguyên' repo của tôi thành một phiên bản trước đó, sẽ trở thành sửa đổi đầu. Bất cứ ai biết làm thế nào tôi sẽ làm điều này?


1
Bạn thực sự không thể xóa các bản sửa đổi cũ, tất cả những gì bạn có thể làm là đảo ngược các thay đổi và cam kết điều đó, như được đề cập bởi Felix. Sidenote thú vị, Git (cũng như các giải pháp kiểm soát phiên bản khác) thực sự cho phép bạn thực sự xóa các sửa đổi ..
davr

3
Có, bạn có thể, bạn chỉ cần truy cập vào kho SVN với svnadmin. Xem câu trả lời của tôi dưới đây.
martin

davr là đúng kỹ thuật. Những gì bạn mô tả là từ bỏ tất cả các sửa đổi ngoại trừ những sửa đổi xấu, sau đó đổ nó lên trên repo cũ. Trong tâm trí tôi không thực sự giống như 'xóa' một bản sửa đổi.
Sirex

Câu trả lời:


12

Có lẽ liên kết này giúp bạn:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Trích dẫn:

  1. Thay đổi thư mục trên cùng trong bản sao làm việc của bạn (giả sử bạn muốn khôi phục lại toàn bộ bản sao làm việc).

  2. chạy svn revertđể hoàn nguyên các tệp của bản sao làm việc của bạn về trạng thái khi chúng được cam kết / kiểm tra lần cuối.

  3. chạy svn status -vđể xem số sửa đổi mà bản sao làm việc của bạn hiện tương ứng với (đó là số sửa đổi cao nhất trong danh sách svn status -vtạo ra).

  4. chạy svn merge -rXX:YYở đâu XXlà số bạn có được trong bước trước và YYlà số sửa đổi bạn muốn hoàn nguyên.

  5. Làm xong! Ngoại lệ có thể xảy ra là các tệp trong bản sao làm việc của bạn không tồn tại khi sửa đổi YYban đầu được thực hiện, vẫn sẽ ở đó, vì theo mặc định, svn không xóa mọi thứ. Nếu bạn muốn loại bỏ chúng, hãy chạy svn del [filename]từng cái một.

  6. Làm tốt! Bây giờ hãy chơi với bản sao làm việc của bạn như thể tất cả những chỉnh sửa trung gian đó chưa bao giờ xảy ra. Và khi bạn đã sẵn sàng cam kết nỗ lực của mình, chỉ cần sử dụng cam kết svn như bình thường!


1
Trong Windows Os, tùy chọn # 4 chạy svn merge -rXX:YY .Hãy nhớ đặt một dấu chấm ở cuối dòng để tham chiếu thư mục hiện tại. Và trong TortoiseSVN, có một tùy chọn để đảo ngược hợp nhất.
Chaiha Kumara

3
Điều này không thực sự trở lại "sửa đổi trước đó, mà sẽ trở thành sửa đổi đầu". Nó không làm cho bản sửa đổi cũ hơn ĐẦU. Thay vào đó, nó tạo ra một ĐẦU mới. Xem câu trả lời của martin.
Matthew Flaschen

Tôi đã sửa đổi câu trả lời để bao gồm nhận xét của Shantha về giai đoạn kéo dài. Điều này cũng tương tự trên * nix.
Mike Kormendy

72

Điều này làm việc cho tôi. Cho rằng bạn đã sửa đổi 1234 với tư cách là TRƯỚC và bạn muốn hoàn nguyên ba lần xác nhận cuối cùng:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Bạn là người duy nhất hiểu cả câu hỏi và đưa ra câu trả lời cụ thể.
Matthew Flaschen

6
Đây là kỹ thuật câu trả lời đúng. Tuy nhiên, cần phải chỉ ra rằng điều này, ngoài việc có thể khá phức tạp để làm, cũng sẽ làm mất hiệu lực tất cả các bản sao đã thanh toán - vì vậy bạn sẽ cần cảnh báo cho bất kỳ ai cũng đang sử dụng repo.
sleske

1
nhanh chóng và dễ dàng và đến điểm và thực sự những gì người đăng yêu cầu.
bắt

7
Miễn là bạn đảm bảo cũng sao chép UUID kho lưu trữ sang repo mới (xem "svnadmin setuuid", sao chép từ UUID trong "thông tin svn" trên repo cũ), chỉ kiểm tra cập nhật vào các bản sửa đổi bạn sẽ cắt ra bị vô hiệu
Bryan Petty

1
Trên repos mới, bạn có thể cần sửa quyền truy cập tệp hoặc sao chép trong tệp trong thư mục hook / conf
AdamS

5

Tôi biết đây là một câu hỏi cũ, tuy nhiên, tôi vừa tìm thấy cách thực hiện điều này với Windows / TortoiseSVN.

Như một nhận xét được đề xuất, bạn không thể "xóa" bản sửa đổi, nhưng điều bạn có thể làm là tạo một bản sửa đổi hiện tại giống với bản sửa đổi mà bạn muốn hoàn nguyên.

  1. Kiểm tra phần đầu của kho lưu trữ cho thư mục bạn muốn hoàn nguyên bản sửa đổi từ đó.
  2. Tải chế độ xem "Hiển thị nhật ký" trong TortoiseSVN cho thư mục cấp cao nhất bạn muốn hoàn nguyên (ví dụ: "Trunk").
  3. Nhấp chuột phải vào bản sửa đổi bạn muốn xóa LƯU Ý: đây là bản sửa đổi bạn muốn xóa, không phải bản sửa đổi bạn muốn hoàn nguyên.
  4. Chọn "Hoàn nguyên các thay đổi từ phiên bản này".
  5. Nhấp vào "Có" tại dấu nhắc.
  6. Cập nhật thanh toán như bình thường, nhưng thành "ĐẦU".
  7. Cam kết nó trở lại.

Sau đó, bạn sẽ đi đến những người khác đã kiểm tra và yêu cầu họ cập nhật và đảm bảo xóa mọi tệp mới.

Ngoài ra, bạn sẽ cần đảm bảo rằng mọi người đều biết bản sửa đổi đó là gì và có khả năng cập nhật mô tả.


Làm thế nào khác với thủ tục "hoàn nguyên" bình thường?
Tomer W

Một Revert chỉ thay đổi bản sao làm việc của bạn thành nội dung trong repo ... đây là cách làm cho phần đầu của báo cáo phản ánh trạng thái của bất kỳ cam kết nào trước đó.
Martin

1
Cảm ơn vì điều này - Làm điều này theo cách SVN rùa chỉ là những gì tôi cần để hoàn nguyên một cam kết sai lầm :)
Tiến sĩ Andrew Burnett-Thompson

Ngoài ra còn có một mục trình đơn ngữ cảnh " Hoàn nguyên bản sửa đổi này " trong cửa sổ Nhật ký.
Uwe Keim

4

Bạn có thể sử dụng kết xuất / tải cho mục đích này.

Bạn cũng có thể sử dụng svnsync để tạo bản sao lưu cho một số sửa đổi.

Nếu bạn có một kho lưu trữ lớn, nó cần có thời gian.


3

Đối với tôi (VisualSVN, 30-Head) hoạt động thế này:

  del C: \ Kho lưu trữ \ MyRepo \ revs \ 0 \ 30
  del C: \ Kho lưu trữ \ MyRepo \ revs \ 0 \ 29
  del C: \ Kho lưu trữ \ MyRepo \ revs \ 0 \ 28
  del C: \ Kho lưu trữ \ MyRepo \ revprops \ 0 \ 30
  del C: \ Kho lưu trữ \ MyRepo \ revprops \ 0 \ 29
  del C: \ Kho lưu trữ \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Kho lưu trữ \ MyRepo \ db \ current
  


Làm thế nào là điều này tốt hơn so với câu trả lời khác?
Toto

Nó nhanh hơn nhiều.
Anton Golikhoff

0

Đi đến thiết bị đầu cuối và điều hướng đến đại diện svn: bây giờ gõ

svn update -r "số sửa đổi bạn muốn hoàn nguyên"


2
Chào mừng bạn đến với Siêu người dùng! Xin vui lòng đọc lại câu hỏi một cách cẩn thận. Câu trả lời của bạn không trả lời câu hỏi ban đầu. OP nói "Tôi không muốn chỉ đơn giản là sử dụng 'hoàn nguyên' trên bản sao làm việc của mình"
DavidPostill
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.