2013-06-04 21 views
9

Lỗi sửa lỗi dành cho nhà phát triển trong một chi nhánh được tạo từ thân cây. Sau đó, tôi kiểm tra các chi nhánh và tái hòa nhập trở lại thân cây.Làm thế nào để cam kết từ những thay đổi nội dung chỉ dòng lệnh chứ không phải những thay đổi về tài sản?

Gần đây tôi cũng cam kết thay đổi tài sản. Có ba tập tin mà tôi cam kết trở lại thân cây hơn và hơn. Tôi so sánh nội dung của các tập tin giữa các phiên bản bằng svn và chúng giống nhau. Chỉ một số thuộc tính đã thay đổi.

Q1: có cách nào để tôi chỉ cam kết từ các tệp dòng lệnh chỉ có M trong cột đầu tiên khi tôi làm svn st?

Q2: Có cách nào để chúng tôi có thể xóa thân cây hoặc cách loại bỏ ba tệp này liên tục không?

---- chỉnh sửa svn st mang lại cho tôi

M  . 
M  controllers/database/udfs/searchForNameContSrch.sql 
M  controllers/eduMoodleInterface 
M  controllers/main 
M  controllers/teaching 
M  lib/utils/EduMail.php 
M  lib/views/learning/progress/reverse_template_converter.php 
M  pages/carer/carer_basepage.php 
M  pages/common/contact_list_detail_basepage.php 
M  pages/contact/contact_basepage.php 
M  pages/staff/staff_basepage.php 
M  pages/student/student_basepage.php 

giải pháp hiện nay là để phục hồi các tập tin có M trong cột thứ hai trước khi cam kết. Nó hoạt động nhưng tốn thời gian. Bạn có ý tưởng nào khác không?

+0

Đây có lẽ là gian lận và quá thanh nha là một câu trả lời, nhưng thỉnh thoảng tôi sao chép và dán các tệp tôi muốn vào vi, xóa cột chữ cái đầu tiên, sau đó giữ phím shift-J cho đến khi tất cả tên tệp trên cùng một dòng, sau đó thêm "svn ci -mBlahBlah" vào phía trước của dòng đơn đó và cuối cùng thực hiện dòng đó dưới dạng lệnh shell. –

+0

:-) đó là loại giống như hoàn nguyên các tệp tôi không muốn cam kết. Họ không nên cam kết, chúng tôi không biết tại sao các tài sản đã được thay đổi anyway. – Radek

+0

Q1: Bạn có thể sử dụng Tortoise để thực hiện loại công việc đó. Chọn trong hộp kiểm các tập tin bạn muốn cam kết. Q2: Cùng một công cụ phản hồi vào Q1, Rùa làm việc đó cho bạn, nếu bạn có nhiều tệp, bạn có thể xóa chúng bằng công cụ này. –

Trả lời

7

Tôi muốn có nhiều khuynh hướng tìm ra những gì đang xảy ra với các thuộc tính và giải quyết vấn đề đó hơn là cố gắng bỏ qua chúng. Điều đó nói rằng, ở phần cuối của câu trả lời này, có một lớp lót sẽ tăng tốc quá trình hoàn nguyên của bạn nếu bạn đang sử dụng Linux.

Vì lợi ích của câu trả lời này, tôi đã đặt thuộc tính trên một tệp (window.c) và sửa đổi một (window.h).

svn status 
M  window.c 
M  window.h 

Các lệnh chính svn sử dụng đối với tài sản là:

svn propset answer 42 window.c 
property 'answer' set on 'window.c' 

Thiết lập một 'trả lời' propety trong hồ sơ window.c để đánh giá 42. Bạn có lẽ không muốn sử dụng này.

svn proplist window.c 
Properties on 'window.c': 
    svn:keywords 
    svn:eol-style 
    answer 

Liệt kê tất cả các thuộc tính (không có giá trị) trên tệp.

svn propget answer window.c 
42 

Lấy giá trị của một thuộc tính cụ thể.

svn propedit answer window.c 
Set new value for property 'answer' on 'window.c' 

Mở trình chỉnh sửa (trên máy của tôi là nano tất cả mọi thứ) và cho phép bạn chỉnh sửa thuộc tính, sau đó đặt nó trên tệp đã cho.

svn propdel answer window.c 
property 'answer' deleted from 'window.c'. 

Xóa thuộc tính được chỉ định (điều này có thể sẽ không giải quyết được sự cố của bạn).

Bạn cũng có thể làm svn diff để tìm ra các tài sản là khác nhau:

svn diff window.c 
Index: window.c 
=================================================================== 
--- window.c (revision 35712) 
+++ window.c (working copy) 

Property changes on: window.c 
___________________________________________________________________ 
Added: answer 
## -0,0 +1 ## 
+42 
\ No newline at end of property 

này về cơ bản nói rằng sự thay đổi duy nhất ở đây là một 'trả lời' bất động sản đã được thêm vào, với giá trị 42 (và không có xuống dòng).

Vì vậy, những gì tôi muốn làm Bắt đầu với svn diff và tìm hiểu những gì đang thay đổi:

svn diff controllers/database/udfs/searchForNameContSrch.sql 
svn diff controllers/main 

Có một google cho các tài sản đó đang thay đổi và xem nếu bạn có thể tìm ra những công cụ được thiết lập nó và tắt nó đi.

Bạn có thể thử sử dụng svn propdelete để bỏ qua các thuộc tính, nhưng tôi không nghĩ điều đó sẽ hữu ích.

Không đó - một Revert kịch bản nhanh chóng

Ngược lại, nếu bạn đang sử dụng Linux, lót này sẽ phục hồi các tập tin có thay đổi tài sản, nhưng không sửa đổi nội dung.

XIN VUI LÒNG KIỂM TRA NÀY VỀ CẬP NHẬT KHÔNG CHÍNH XÁC LẦN ĐẦU TIÊN, CÓ?!?!?

svn status | grep "^ M" | sed "s/^.\{8\}//" | while read rv; do svn revert $rv; done 

Đó là:

  • tình trạng svn

  • ống thông qua grep và bộ lọc cho dòng CHỈ bắt đầu bằng 'M' (vì vậy nó sẽ bỏ qua 'MM' - quan trọng).

  • tô nó qua sed và xóa 8 ký tự đầu tiên (tất cả các cột trạng thái trước tên tệp).

  • ống thành vòng lặp và hoàn nguyên tên tệp đã cho.

Đây là nó trong hành động:

svn status 
M  window.c 
M  window.h 
svn status | grep "^ M" | sed "s/^.\{8\}//" | while read rv; do svn revert $rv; done 
Reverted 'window.c' 
svn status 
M  window.h 
+0

Tôi hy vọng chúng ta có thể tìm ra bất động sản nào đã được thay đổi. Nghe có vẻ thú vị. –

1

Bạn viết rằng những tính chất thay đổi khi bạn tái hòa nhập trở lại thân cây, vì vậy tôi đoán tài sản thay đổi là svn:mergeinfo, nhưng bạn cần để xác minh điều đó.

Giả sử ở trên, hãy xem các nguồn sau đây để hiểu số mergeinfo là gì và tại sao bạn thực sự làm muốn cam kết những thay đổi đó. Ngoài ra, có thể làm sạch các thuộc tính đó và không làm cho chúng xuất hiện trở lại nếu bạn dính vào quá trình hợp nhất chặt chẽ hơn - tức là luôn chạy kết hợp trên thư mục gốc/nhánh gốc. Bằng cách này, mergeinfo sẽ chỉ được ghi lại trên các thư mục đó, chứ không phải trên các tệp riêng lẻ. Điều này có lợi ích không gây ô nhiễm repo của bạn với mergeinfo nằm rải rác xung quanh, và cũng làm cho cam kết của bạn khác biệt rõ ràng hơn.

Nguồn:

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