2009-09-04 23 views
7

Tôi gặp vấn đề lâu dài: tại nơi làm việc, chúng tôi sử dụng mercurial như một DSCM, nhưng chúng tôi không thể tìm ra cách giữ các tập tin cấu hình đồng bộ.Câu hỏi về quy trình làm việc Mercurial (cách xử lý các tệp Config)

Vấn đề là chúng tôi muốn theo dõi các tệp cấu hình và muốn có thể trao đổi nội dung tệp cấu hình giữa các nhà phát triển, nhưng mọi nhà phát triển đều muốn có phần connectionStrings của mình độc lập với người khác '.

Có thể bằng cách nào đó giữ các tệp cấu hình được theo dõi nhưng để bỏ qua phần chuỗi kết nối khi kéo và đẩy không?

Chúng tôi đã thử thêm tệp cấu hình vào .hgignore nhưng khi ai đó thêm điều gì đó quan trọng vào tệp cấu hình, chúng tôi phải chia sẻ tệp đó qua email.

Cảm ơn bạn.

Trả lời

6

Nếu bạn không thể xử lý nó với việc bao gồm cài đặt tùy chỉnh, chỉ cần có tệp cấu hình cơ sở trong repo.

Sau đó, mỗi nhà phát triển đặt tùy chỉnh của riêng nó lên trên cùng (với mq). Nếu tùy chỉnh không quá xâm nhập thì việc hợp nhất sẽ luôn hoạt động tốt.

Có một cách khác, nơi mà bạn liên tục kết hợp tùy bạn, nhưng sau đó khi đẩy bạn phải nhớ không để đẩy chi nhánh merge (tX là đường chính, c1 là tùy biến)

t1-t2-t3-t4-...-tN 
    \ \  \ \ 
    c1---c2-----c3--c4 

Nhu cầu dev và đẩy những thay đổi chỉ có tX làm cha mẹ, cX sẽ không bao giờ thoát khỏi repo.

1

Cách không phải DVCS để xử lý nó là thiết lập quy trình xây dựng để đọc chuỗi kết nối từ tệp cấu hình riêng biệt và sau đó xử lý trước trong quá trình xây dựng (trong java bạn có thể sử dụng kiến ​​hoặc maven để lọc từ thuộc tính tập tin, tôi không biết về MS-land).

4

Tôi không biết chi tiết về tệp cấu hình của bạn, nhưng nếu bạn có thể bao gồm các tệp khác, hãy tạo tệp config_local để giữ cài đặt dành riêng cho nhà phát triển. Thêm tệp đó vào .hgignore. Các cài đặt phổ biến đi vào tệp cấu hình chính, sau đó bao gồm tệp config_local.

Như Ken nói, nếu việc đưa vào không phải là một lựa chọn, thì việc xử lý tiền xử lý trong bước xây dựng có thể là cách để thực hiện.

3

Bạn có thể sử dụng Mercurial Queues để thực hiện. Vì vậy, những gì bạn sẽ làm là có cấu hình "thực" (s) dưới hg (với tên thật của chúng), và các nhà phát triển có thể duy trì các tùy chỉnh của họ bằng cách sử dụng các bản vá nằm trên đầu trang và được duy trì với mq.

Sau đó, khi nhà phát triển cần cập nhật cấu hình thực, họ bật bản vá của họ chứa tất cả các tùy chỉnh của họ khỏi ngăn xếp, thực hiện thay đổi đối với cấu hình và cam kết + đẩy nó.

Giả sử tất cả các nhà phát triển khác không ghi đè những thay đổi cụ thể đó trong hàng đợi của riêng họ, họ sẽ nhận được chúng vào lần tiếp theo họ kéo + cập nhật.

0

Đó là một chút khốn khó, nhưng bạn có thể sử dụng KeywordExtension để tự động mở rộng mã thông báo. Trong tệp cấu hình của bạn, hãy đặt một cái gì đó như thế này:

db.host = $DBHOST$ 
db.host = $DBUSER$ 
db.host = $DBPASS$ 

và sau đó trong ~ /.Người dùng tệp hgrc sẽ có nội dung như sau:

Sản xuất, tất nhiên, sẽ có riêng .hgrc.

Đề án sẽ khiến mọi người tốn một chút thời gian thiết lập một lần, nhưng sau đó nó sẽ tự động. Mặc định có thể nằm trong tệp/etc/mercurial/hgrc trong hệ thống-khôn ngoan trong trường hợp người dùng không muốn đặt chuỗi kết nối riêng của họ.

1

Đặt các chuỗi kết nối của bạn vào một tệp khác. ví dụ. trong web.config:

<connectionStrings configSource="connections.config" /> 

Sau đó, bạn có một tập tin connections.config với chuỗi kết nối, mà bạn có thể loại trừ từ kho lưu trữ do đó để cho mỗi nhà phát triển sửa đổi nội dung trái tim của họ.

Nếu bạn muốn phiên bản 'tham chiếu' của tệp connections.config chỉ cần thêm một tệp khác connections.example.config dưới sự kiểm soát nguồn và sử dụng làm phiên bản mẫu của bạn.

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