Tôi không nhận được một tập tin vào svn trước khi cam kết


200

Tôi đang thực hiện một add / commit svn đệ quy và một thư mục không có thuộc tính bỏ qua thích hợp được đưa vào. Tôi đã có khoảng 100 tệp nhị phân được tải lên phiên bản, nhưng tôi chưa cam kết.

Cách dễ nhất để 'hoàn tác' này, mà không xóa tất cả các tài liệu là gì?

Câu trả lời:


244

Sử dụng svn revert --recursive folder_name


Cảnh báo

svn revertvốn đã nguy hiểm, vì toàn bộ mục đích của nó là vứt bỏ dữ liệu - cụ thể là những thay đổi không được cam kết của bạn. Khi bạn đã hoàn nguyên, Subversion không cung cấp cách nào để lấy lại những thay đổi không được cam kết đó.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html


12
Để mở rộng dựa trên điều này - revertkhông có sửa đổi được chỉ định sẽ hoàn tác mọi thay đổi xảy ra kể từ lần thanh toán cuối cùng, bao gồm thêm / xóa thay đổi lịch trình, cho (các) tệp được chỉ định.
Amber

trong đó thư mục_name là thư mục mẹ của thư mục nơi bạn đã thực hiện lệnh "Thêm"
MacGyver

28
Câu trả lời này là không chính xác một cách nguy hiểm - nó sẽ làm sáng tỏ những thay đổi của bạn bằng cách TÌM HIỂU CÁC BẢN SAO ĐỊA PHƯƠNG CỦA BẠN. Câu trả lời của Brian Lacy dưới đây tốt hơn nhiều.
Henry Henrinson

6
Các bạn, điều này trả lời câu hỏi ban đầu: một tập tin hoặc thư mục đã được thêm vào, sau đó được hoàn nguyên, chỉ trở lại không được phiên bản, mà không bị xóa. Đó chính xác là những gì câu hỏi yêu cầu. Nếu bạn sử dụng nó trên các tệp sửa đổi, tất nhiên nó sẽ hoàn nguyên chúng: nhưng đó không phải là câu hỏi. Đó thậm chí là trường hợp sử dụng rất cụ thể được hiển thị trên trang được liên kết!
Julien Lebosquain

2
@JulienLebosquain Ok, tôi đoán bạn và tôi hiểu cụm từ này khác nhau: không xóa tất cả các tài liệu . Thật không may, svn revertcũng xóa các thay đổi mới được thêm vào trong bản sao làm việc, bằng cách khôi phục HEADphiên bản mới nhất . Tôi đã gỡ bỏ downvote của mình, nhưng tôi vẫn cảm thấy cảnh báo là quan trọng.
jpaugh

145

svn rm --keep-local folder_name

Lưu ý: Trong svn 1.5.4 svn rm xóa các tệp không đảo ngược ngay cả khi --keep-local được chỉ định. Xem http://svn.haxx.se/users/archive-2009-11/0058.shtml để biết thêm thông tin.


9
Điều này là tốt để biết vì nó cho phép bạn chỉ cần hoàn tác "svn add" mà không mất thay đổi!
Ryan H.

1
Bạn có chắc chắn SVN 1.5.4 xóa các tệp không đảo ngược? Báo cáo không thể sao chép được và không có email nào khác về điều đó.
Quentin Pradet

4
Đây là câu trả lời tốt hơn nếu bạn muốn "bỏ qua" các tệp, nhưng vẫn giữ chúng. Sau lệnh này, các tập tin sẽ vẫn ở đó với? trạng thái.
Robin Zimmermann

32

Hãy thử svn revert filenamecho mọi tệp bạn không cần và chưa cam kết. Hoặc thay thế làmsvn revert -R folder cho thư mục có vấn đề và sau đó thực hiện lại thao tác với cấu hình bỏ qua chính xác.

Từ tài liệu:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops

4
Không! Hoàn nguyên là không an toàn, vì nó mất tất cả các thay đổi cục bộ
jpaugh

@jpaugh - Đây chính xác là những gì tôi đã viết trong câu trả lời, phải không?
bobah

1
Những gì OP yêu cầu (và những gì tôi đang mong đợi) là một lệnh để hoàn tác bổ sung mà không mất các thay đổi cục bộ. svn revert. Không có câu trả lời nào ở đây đề cập đến thực tế là những thay đổi cục bộ sẽ bị mất bởi hoàn nguyên.
jpaugh

3

Toàn bộ quá trình (gói svn Unix):

Kiểm tra các tệp không có trong SVN:

> svn st -u folder 
? folder

Thêm tất cả (bao gồm các tệp bị bỏ qua):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

Xóa cờ "Thêm" cho tất cả các tệp * Bỏ qua *:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

Chỉnh sửa svn bỏ qua trên thư mục

svn propedit svn:ignore .

Thêm hai dòng đơn với chỉ sau đây:

folderToIgnore
fileToIgnore2.txt

Kiểm tra tập tin nào sẽ được tải lên và cam kết:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"

1
Cảm ơn, chính xác những gì tôi cần. Có vẻ như nó chỉ hoàn nguyên thao tác 'thêm', không chạm vào chính nội dung tệp. Tôi đã sợ về việc mất các thay đổi cục bộ như đã nhận xét về các câu trả lời trước đó, nhưng có vẻ như không có tệp nào bị tổn hại.
Peter M. - là viết tắt của Monica

1

Đối với tệp - svn revert filename

Đối với thư mục - svn revert -R folder


4
Không! Hoàn nguyên là không an toàn, vì nó mất tất cả các thay đổi cục bộ
jpaugh
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.