2009-05-03 22 views
8

Tôi đang ở đâu: Linux dòng lệnhSVN nguyên tử cam kết như thế nào-to

Vấn đề tôi có bây giờ:

Đôi khi tôi không thể thực hiện cam kết nguyên tử (bao gồm tất cả những sửa đổi cần thiết cho một vé đặc biệt/nhiệm vụ), bởi vì chúng tôi có một số tệp trong kho lưu trữ, nội dung nào khác nhau ở môi trường phát triển cục bộ.

Ví dụ: database.xml (dbname, tên người dùng, mật khẩu, v.v.). Tôi sửa đổi tệp này trong môi trường cục bộ của mình và mỗi lần tôi cần thực hiện cam kết/kiểm tra, tôi đã liệt kê tất cả các tệp/thư mục cần thiết cho cam kết (không bao gồm tệp được sửa đổi cục bộ này).

Có thể đó là quyết định thiết kế sai và database.xml phải bị xóa khỏi kho và thay đổi cho database.xml.template (được lưu trữ trong SVN), vì vậy tệp này sẽ không được bao gồm để cam kết cho đến khi bạn thực hiện thủ công svn add cho nó? Có thể đó là cách tiếp cận sai - để lưu trữ tất cả thông tin phụ thuộc vào môi trường này trong kho lưu trữ - trong trường hợp đó chúng tôi có thể phá vỡ mọi thứ bằng cách cam kết cấu hình đã sửa đổi, ví dụ:

Như tôi đã hiểu, svn:ignore tài sản không thể trợ giúp tình huống này, bởi vì nó chỉ có thể được sử dụng cho các tệp không được lưu trữ trong kho lưu trữ.

Làm cách nào để giải quyết vấn đề này?

P.S .: Tôi đang sử dụng Ubuntu và dòng lệnh thuần túy cho SVN.

+0

Tôi đồng ý với việc giữ một tệp '.template' trong Subversion và cấu hình thực, phiên bản sửa đổi, chỉ cục bộ.Điều quan trọng là các nhà phát triển nên * không bao giờ * sửa đổi các tập tin cấu hình thực sự khác với cấu hình cá nhân. Nghĩa là, nếu một tùy chọn mới được thêm vào tệp, thì nó phải được thêm vào tệp '.template' và sau đó tạo lại tệp cấu hình của riêng nó (có thể tự động hóa việc xây dựng lại cấu hình từ' .template' tập tin với một kịch bản để giảm bớt công việc). –

+0

Có, tôi đã có database.xml.template trong SVN, database.xml.override trong các kiểm tra cục bộ và bỏ qua, và một kịch bản lệnh để kết hợp hai để tạo ra tệp database.xml. Ít nhất, tôi sẽ nếu tôi có thời gian để viết kịch bản ;-) Nếu không, các nhà phát triển phải thực hiện việc hợp nhất thủ công vào databaes.xml mỗi khi thay đổi database.xml.template. –

+0

Trên thực tế, nếu nhà phát triển muốn thực sự ưa thích, thì có thể làm cho tệp database.xml.override liên kết cứng đến tệp mà họ kiểm soát phiên bản trong nhánh cá nhân của kho lưu trữ, do đó cấu hình cá nhân cũng được kiểm soát. –

Trả lời

8

Thủ tục "chuẩn" cho điều này là một cái gì đó như thế này (tha thứ cú pháp SVN, tôi đã sử dụng Bazaar thời gian gần đây):

echo config > database.xml.template 
svn add database.xml.template 
svn ignore database.xml 
svn commit 

Sau đó trên máy tính phát triển của mỗi người:

svn checkout 
cp database.xml.template database.xml 
...edit database.xml... 

Và khi họ cam kết,

echo foo > someotherfile 
svn commit 

database.xml tệp sẽ không được thêm vào Subversion.

+3

lệnh thực tế để tạo tệp cơ sở dữ liệu svn ignore.xml sẽ là "svn propset svn: ignore database.xml." (như của svn 1.5.5) – che

+2

Nếu tôi nhớ chính xác bằng cách sử dụng propset sẽ ghi đè lên tất cả các svn: bỏ qua khác tại chỗ. Bạn có thể thử kết hợp propget và propset hoặc dễ dàng hơn chỉ là propedit và sử dụng trình soạn thảo để thêm một dòng khác. –

6

Bạn nên lưu trữ một mẫu trong kho lưu trữ, chứ không phải tệp thực sự mà bạn cần sửa đổi cục bộ.

Bằng cách này bạn có thể xây dựng lại một tệp nguyên sơ, nếu bạn cần, mà không có rủi ro lưu trữ tệp vào kho lưu trữ không nên ở đó.

Và không, svn: ignore sẽ không giúp bạn ở đây.

0

2 xu của tôi: Trước hết bạn cần đảm bảo có cách nào (dễ) để hài hòa đường dẫn của bạn cho tất cả các nhà phát triển có liên quan đến dự án của bạn. Đây có thể là cấu trúc thư mục tương đối hoặc một số lớp mỏng trong ứng dụng của bạn hỗ trợ một số shell shell hoặc như $ home,% USERPROFILE% v.v. Điều này thuận tiện hơn nhiều so với việc cho phép mỗi dev xử lý cấu hình không phiên bản riêng của nó và đó cũng là những gì IDE đang cố gắng cung cấp.

Nói chung, các tệp cấu hình phiên bản hoàn toàn phù hợp với tôi, nó chỉ đơn giản là thời gian một dev dành để thiết lập mọi thứ và không nên bị mất do tai nạn.

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