9

Chúng tôi sử dụng git cho hầu hết các ứng dụng web mà chúng tôi xây dựng trong cửa hàng của mình và mặc dù bản thân ứng dụng sử dụng nhiều công nghệ khác nhau (PHP, Rails, v.v.) máy chủ cho mỗi trang web. Thông thường, các máy chủ này có các bộ thông tin xác thực cơ sở dữ liệu khác nhau cũng như các cài đặt cấu hình dựa trên môi trường khác nhau (ví dụ: bộ nhớ đệm). Luồng công việc của chúng tôi thường liên quan đến việc duy trì hai nhánh git cho mỗi dự án: chủ, phản ánh máy chủ sản xuất và dàn dựng, phản ánh dàn dựng. Các tính năng mới được phát triển trên dàn dựng (hoặc một nhánh phụ) và được sáp nhập trở lại làm chủ khi hoàn thành và triển khai.Git: cấu hình ứng dụng và các môi trường khác nhau

Câu hỏi của tôi là liên quan đến cách tốt nhất để duy trì các tệp cấu hình chuyên biệt về chi nhánh và môi trường. Tôi đã nhìn thấy câu trả lời từ các câu hỏi tương tự herehere và không thực sự thỏa mãn. Hai cách tiếp cận chính dường như là a) sử dụng loại trừ .gitignore để rời khỏi các tệp cấu hình bên ngoài chế độ xem của git, hoặc b) viết mã phản chiếu, nhận biết môi trường xác định ví dụ: những thông tin cơ sở dữ liệu nào để sử dụng dựa trên tên máy chủ. Vấn đề của tôi với a) là nó chỉ cho phép một tập hợp các tệp cấu hình tồn tại trong codebase (không phụ thuộc vào nhánh hiện tại), do đó các tệp cấu hình của môi trường khác bị mất. b), mặt khác, dường như yêu cầu sửa đổi không cần thiết của codebase theo cách không liên quan đến chức năng của ứng dụng. Lý tưởng nhất, tôi muốn một cách để "khóa" tập tin cấu hình trong một nhánh nhất định, để bất cứ khi nào tôi kiểm tra tổng thể, tôi nhận được các tập tin cấu hình chủ, và bất cứ khi nào tôi kiểm tra dàn dựng, tôi nhận được các tập tin cấu hình dàn dựng. Ngoài ra, việc hợp nhất dàn trang thành chính sẽ không ảnh hưởng đến các tệp cấu hình chính theo bất kỳ cách nào. Đến nay, chúng tôi đã xử lý điều này bằng cách có các thư mục chứa các tệp cấu hình dành riêng cho môi trường bên ngoài gốc git và di chuyển các tệp thích hợp vào codebase khi triển khai, nhưng điều này tất nhiên là không cần thiết (và nguy hiểm).

Có cách nào để thực hiện điều này bằng git không?

Cảm ơn bạn đã cân nhắc!

+0

Sẽ http://stackoverflow.com/questions/2154948/how-can-i-track-system-specific-config-files-in-a-repo-project/2155355#2155355 kết hợp với http: // stackoverflow .com/questions/3207575/how-do-i-open-source-my-rails-apps-không-cho-đi-ứng dụng-bí mật-keys-và/3207608 # 3207608 trợ giúp ở đây? – VonC

Trả lời

12

Không chắc chắn lý do mọi người nghĩ rằng họ có thể lấy đi mà không cần một số công cụ cài đặt. Git là về nguồn theo dõi, không phải về việc triển khai. Bạn vẫn nên có công cụ "make install" để chuyển từ git repo sang triển khai thực tế, và công cụ này có thể làm nhiều thứ khác nhau như mở rộng mẫu hoặc chọn các tệp thay thế.

Ví dụ: bạn có thể đã "config.staging" và "config.production" được đăng nhập vào git và khi bạn triển khai dàn dựng, công cụ cài đặt sẽ chọn "config.staging" để sao chép thành "config". Hoặc bạn có thể có một tệp "config.template" duy nhất, sẽ được tạo khuôn mẫu để tạo "cấu hình" trong triển khai.

+0

Vâng, đó là cách tôi làm mọi thứ. Tôi sử dụng một công cụ triển khai (tôi chủ yếu làm việc với Django vì vậy tôi sử dụng Fabric, hoặc Capistrano trong trường hợp hiếm hoi mà tôi đang làm việc trên một ứng dụng Rails) tự động di chuyển hoặc thiết lập các liên kết đến tệp cấu hình thích hợp khi triển khai. – mipadi

0

Tôi giả định rằng thông thường, master chỉ giữ các cam kết đã có trong staging. Nếu bạn thêm một cam kết thêm vào master trong đó có sự khác biệt trong cấu hình giữa hai chi nhánh, sau đó rebasing cam kết này trên đầu trang của bất cứ điều gì được lấy từ staging nên duy trì cấu hình. Điều này không hoàn toàn đơn giản như "việc hợp nhất dàn trang thành chủ sẽ không ảnh hưởng đến tệp cấu hình chính theo bất kỳ cách nào", nhưng khi bạn nhận được xung đột hợp nhất trong những trường hợp này, nó có thể đủ gần.

3

Bạn có thể thử sử dụng móc hậu sau khi hợp nhất hoặc sau khi kiểm tra để xác minh rằng tất cả phải như vậy và sửa chữa khác. Điều này thực sự là seems to be suggested by the ProGit book.

Khái niệm này về cơ bản là để viết những móc để hoạt động như mini "thực hiện cài đặt" kịch bản để đảm bảo cấu hình đúng theo ngành, theo máy chủ, bởi sự hiện diện hoặc nội dung của các file khác, bởi bất cứ điều gì bạn muốn.Các móc thậm chí có thể viết lại các tệp cấu hình của bạn hoặc tạo lại chúng bằng cách điền vào các mẫu.

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