2011-12-27 26 views
13

tôi sửa một số tập tin trong svn, như thế này:SVN: Làm thế nào để bỏ qua một tệp đã sửa đổi trên cam kết?

$svn st 
M a 
M b 
... 

Bây giờ, tôi muốn cam kết thay đổi của tôi để svn, đối với một số lý do, tôi không muốn cam kết tập tin b, là có cách nào nhanh hay lệnh bỏ qua tập tin đã sửa đổi b?


Cuối cùng, tôi sử dụng @yzucker Giải pháp 1, cp, hoàn nguyên và cam kết. Những người thay đổi quá nặng nề, cảm ơn tất cả các bạn.

Trả lời

7

Than ôi, cam kết nhiều tệp với một số thay đổi gây phiền toái bị bỏ qua.

Giải pháp 1: sao chép, phục hồi và cam kết

$cp b /tmp/ 
$svn revert b 
$svn commit -m 'commit message' 
$mv /tmp/b ./ 

Giải pháp 2: sao chép, cam kết, đảo ngược tác dụng của b, recommit b

$cp b /tmp/ 
$svn commit -m 'commit message' 
$svn merge -c -{new revision} b 
$svn commit b -m 'revert message for b' 
$cp /tmp/b ./b 

Cách tiếp cận thứ hai là ít thích hợp hơn kể từ khi bạn giới thiệu mã bị hỏng trong svn.

+1

Ý tưởng hay, đây phải là một tính năng của chính Subversion. Nên có một lá cờ (để cho nó gọi là '-X') mà sẽ loại trừ các tập tin được cam kết. – mliebelt

3

Tôi không nghĩ rằng có một tùy chọn để loại trừ chỉ một tệp và bao gồm tất cả các tệp khác đã được thay đổi. Trong ví dụ của bạn, bạn chỉ có thể bao gồm các tệp bạn muốn cam kết bởi

svn co a -m "Only commit a" 

sau đó sẽ loại trừ b. Xem số documentation of the command với các ví dụ ở cuối.

Một lựa chọn khác có thể được sử dụng changelists, nhưng đó là nặng thêm ...

+1

Tôi sử dụng danh sách thay đổi cho mục đích này (mặc dù không thông qua dòng lệnh). –

+0

Nếu có các thay đổi để xác định tệp để loại trừ một cách rõ ràng, đó có thể là một tùy chọn. Nhưng thông thường, bạn có nhiều tệp đã thay đổi (không phải trong danh sách thay đổi) và chỉ muốn 1 * không * cam kết ... – mliebelt

2

Nếu file b đã được đã được bổ sung vào kho lưu trữ, nó không thể bỏ qua nó nữa. Bạn phải xóa tệp này, cam kết, tạo lại và đặt thuộc tính bỏ qua như sau:

svn propset svn:ignore b . 

Dấu chấm cuối cùng có nghĩa là thư mục hiện tại.

Nếu bạn muốn bỏ qua các tập tin chỉ trong cam kết này, hãy nhập tên của họ một cách rõ ràng trong phạm lệnh

svn co a c d 

đâu a, c, d là các tập tin bạn muốn cam kết.

+0

Lệnh cuối cùng có phải là 'svn ci a c d' không? Đây là một giải pháp, cảm ơn. – fannheyward

15

Bạn có thể sử dụng tính năng Changelist của khách hàng Subverion mới hơn như trong phiên dụ ngắn này:

$ svn st 
M  a 
M  b 

$ svn cl task1 a 
$ svn cl task2 b 

$ svn st 
--- Changelist 'task1': 
M  a 
--- Changelist 'task2': 
M  b 

$ svn ci --cl task1 -m "checking in only task 1 stuff" 
Sending  a 
Committed revision 11. 
+0

Phiên bản svn là gì? –

2

Trên cửa sổ bạn có thể sử dụng giao diện client TortoiseSVN và chỉ cần chọn hộp kiểm chỉ cần thiết.

Các vấn đề liên quan