2011-01-31 22 views
5

Tôi đang xem xét việc đặt một cơ sở mã chạy một số trang web vào kiểm soát phiên bản. Có một số trường hợp của cơ sở mã này chạy các trang web trên các máy chủ ảo khác nhau.Sử dụng kiểm soát phiên bản với mã không phân cấp?

Sự cố mà tôi đang vật lộn là mỗi phiên bản riêng biệt của nhiều mã hoặc ít hơn cùng một mã đều có thư mục con với các chức năng dành riêng cho trang web. Nhưng có vẻ như hệ thống kiểm soát phiên bản muốn kiểm soát toàn bộ hệ thống phân cấp thư mục.

Ví dụ, mỗi trường hợp có thư mục

/www/smarty/libs/plugins/ 

Tại nơi bạn sẽ tìm thấy các chức năng trang web cụ thể cho smarty. Khi chúng tôi đã sẵn sàng để đưa nó vào kiểm soát phiên bản, thư mục /www sẽ là thư mục gốc.

Vì vậy, một tùy chọn là có tất cả các chức năng dành riêng cho trang web sẽ được chuyển đến tất cả các trang web. Tôi không thấy một vấn đề nào trong bản thân nó, nhưng có vẻ như bằng cách nào đó về mặt kiến ​​trúc 'sai'. Sẽ có một loạt các tệp chỉ thuộc về một triển khai.

Tùy chọn khác là có kho lưu trữ riêng biệt cho từng tệp cụ thể của từng trang trong cơ sở mã. Nhưng có vẻ như nó có thể nhanh chóng trở thành một cơn ác mộng khi cố gắng để có được các trang web mới được triển khai đúng cách.

Cách tốt nhất để làm điều này là gì? Hệ thống kiểm soát phiên bản mà chúng tôi đang xem xét là lật đổ.

Trả lời

2

Nói chung, hệ thống kiểm soát nguồn phải được sử dụng để kiểm soát nguồn. Họ không phải là tốt nhất của họ hoàn toàn kiểm soát hệ thống phân cấp tập tin, quyền truy cập, và những thứ liên quan khác. Đây là tốt nhất còn lại để cấu hình triển khai.

Cách có mỗi dự án và thư mục bạn cần được trình bày một lần trong hệ thống kiểm soát phiên bản. Sau đó, trong một thư mục riêng biệt (có thể gọi là /build/), có các bố cục cấu hình khác nhau. Bạn có thể có một tệp kiến ​​tạo để xây dựng mỗi trang, hoặc maven. Hoặc bạn có thể sử dụng các công cụ như hoặc Fabric để có nhiều quyền kiểm soát hơn đối với mỗi lần triển khai.

+0

Việc xây dựng có thể đơn giản như một kịch bản lệnh shell cho mỗi ứng dụng thực hiện 'cp -r common-files/www; cp -r app1-plugins/www/smarty/libs/plugins'. –

0

Tôi tin rằng điều tốt nhất cần làm là tạo thư mục cấp cao nhất trong kho lưu trữ của bạn cho mỗi trang web (Site-01, Site-02, v.v.) và bên trong các thư mục đó đặt cây nguồn. Sau đó, bạn có thể kiểm tra các dự án một cách riêng biệt. Tôi nghĩ rằng nó chấp nhận được và có phần tiêu chuẩn để sử dụng cùng một kho lưu trữ cho tất cả các dự án mà công ty của bạn có liên quan.

Thuật ngữ của tôi có thể bị cắt giảm, nhưng ý tưởng cơ bản là âm thanh, tôi tin.

+0

Điều đó sẽ không làm cho mỗi thư mục con trở thành một cá thể riêng biệt của cơ sở mã, sao chép nó không cần thiết, và sau đó phải di chuyển thay đổi giữa các thư mục con đó? – user151841

1

Các công cụ được tạo ra để được linh hoạt (nói chung), vì vậy đây là một số gợi ý:

  1. Hầu hết VCS' cho phép bạn bỏ qua các tập tin và thư mục thông qua một số cơ chế (ví dụ Mercurial .hg bỏ qua tập tin), vì vậy bạn sẽ có thể nhắm mục tiêu những gì bạn muốn/nên kiểm soát so với những gì không nên.

  2. Tách tệp/thư mục thành dự án tài nguyên chung và các dự án cụ thể cho trang web và sau đó sử dụng hệ thống xây dựng để tích hợp chúng để tạo gói có thể triển khai. Hệ thống xây dựng có thể đơn giản như một kịch bản lệnh shell hoặc một khung công tác phức tạp hơn. Nếu nó là một sự tích hợp thực sự đơn giản, VCS có thể có một số tính năng cơ bản cho các cơ sở sáp nhập (ví dụ: các phân vùng phụ Mercurial).

1

Với lật đổ, bạn có thể có một loạt các kho:

  • www được trong một kho lưu trữ chung
  • plugins từng có trong một kho lưu trữ trang web cụ thể

Sau đó có bản sao làm việc lồng nhau:

svn co http://www_repo www 
cd www/smarty/libs 
svn co http://foo_plugins_repo plugins 

Mẹo: thêm plugins để svn:ignore tài sản của www/smarty/libs

svn propset svn:ignore "plugins" www/smarty/libs 

Bạn chắc chắn có thể làm điều đó với git quá (thông qua .gitignore), và có lẽ với các hệ thống kiểm soát phiên bản khác nhưng tôi không biết họ.

(Hoặc bạn có thể bỏ qua phần bản sao hoạt động lồng nhau (có thể lăn tăn một số người ra) và kiểm tra những thứ bên nhau, nhưng sử dụng một liên kết tượng trưng thay cho smarty/libs/plugins, trong khi ignore vẫn gắn liền)

1

Bạn' lại thiếu một bước "xây dựng", mà sẽ lấy nguồn trong kiểm soát nguồn và tạo các gói triển khai cho các trang web khác nhau. Chỉ cần một gói nguồn, các cấu hình xây dựng khác nhau tạo ra các gói triển khai khác nhau. Đừng cố gắng trực tiếp đặt bộ deplyoment vào kiểm soát nguồn, nó không phải là nguồn!

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