2011-06-29 31 views
19

vì vậy những gì tôi đề xuất trong công việc của tôi, là đặt db/schema.rb vào tệp .gitignore, vì vậy chúng tôi không có (theo thời gian) các vấn đề hợp nhất.Có nên đặt db/schema.rb vào danh sách .gitignore không?

Có một số lo ngại rằng nếu có điều gì đó khủng khiếp xảy ra (sao băng rơi từ bầu trời ngay trên máy chủ DB và đồng thời tất cả các tệp db/migrete bị hỏng), chúng ta có thể xóa lược đồ và chúng ta sẽ phải sử dụng rake db: purge (để sử dụng lại schema.rb). Tôi đồng ý rằng điều này là có thể và nó là một đối số tốt, nhưng nó không phải là vấn đề bởi vì db/schema.rb được tạo ra mỗi khi chúng tôi làm rake db: di chuyển. Vì vậy, ngay cả khi chúng tôi sẽ không đẩy schema.rb trên máy chủ, chúng tôi đang đẩy di chuyển thêm chạy db: di chuyển mỗi lần chúng tôi triển khai với các thay đổi DB và với db đó: di chuyển đường ray sẽ tự động tạo schema.rb ở phía máy chủ và schema.rb nằm trên máy chủ không thay đổi cho đến khi chúng tôi thực hiện một db khác: di chuyển.

vì vậy ý ​​kiến ​​của bạn là gì, chúng ta nên hay không nên đặt db/schema.rb vào git bỏ qua?

cảm ơn bạn

+1

có thể trùng lặp của [Cách tiếp cận phù hợp để xử lý tệp db/schema.rb Rails trong GIT là gì?] (Http: // stackoverflow.com/questions/6450263/what-is-the-right-approach-to-deal-với-rails-db-schema-rb-file-in-git) –

+0

Darn, tôi khá tự hào về câu trả lời của tôi :) – VonC

+0

xin lỗi nhưng liên kết là quá thuyết phục :(, nhưng cảm ơn bạn đã giúp đỡ – equivalent8

Trả lời

30

Tôi luôn đề nghị giữ schema.rb trong phiên bản contol, vì các tác vụ như rake db: schema: load phụ thuộc vào nó đang ở đó.

Giới thiệu về xung đột, bạn có đang nói về xung đột phiên bản lược đồ không? Đây có thể dễ dàng giảm nhẹ bằng cách sử dụng thuật toán hợp nhất được hiển thị tại đây: http://tbaggery.com/2010/10/24/reduce-your-rails-schema-conflicts.html

Các xung đột khác, như vị trí chuyển đổi định nghĩa cột có thể dễ dàng tránh được bằng cách cẩn thận những gì bạn cam kết lưu trữ.

+1

+1 cho liên kết, ý tưởng hay – MBO

+0

yea Tôi đang nói về xung đột git (VSC), liên kết yo được đăng thực sự là ý tưởng tốt đẹp thực sự, tôi sẽ nghĩ về điều đó (+1) – equivalent8

4

Bạn nên đặt VCS vào bất cứ thứ gì bạn cần để tạo lại môi trường hoạt động.
Nếu, để xây dựng lại ứng dụng của bạn, bạn cần có quyền schema.rb (ở đúng phiên bản), sau đó có, nó có thể được phiên bản.

Nhưng nếu bạn có thể làm cho nó trở lại thông qua một quy trình khác, thì tốt hơn là sao lưu thông qua một số tham chiếu khác so với một VCS.

+0

ok, tranh luận lấy lợi ích của việc không đặt nó vào .gitignore :) – equivalent8

+1

@ tương đương: có, đó là lý do tại sao tôi đã upvoted [Câu trả lời của Martijn] (http: //stackoverflow.com/questions/6520017/is-a-good-idea-to-put-db-schema-rb-to-gitignore-list/6520115#6520115), bao gồm trường hợp thực tế trong đó 'schema.rb' là cần thiết. – VonC

+1

tệp schema.rb chứa văn bản sau: "Bạn nên kiểm tra tệp này trong hệ thống kiểm soát phiên bản của mình". – hlegius

4

Khi bạn chuyển đổi giữa các ngành chức năng mà phát triển bộ khác nhau của các thuộc tính mô hình, sau đó mà không schema.rb đôi khi bạn sẽ cần phải:

  1. rake db:migrate:down VERSION=xxx di cư đó đã tạo ra một số thời gian trước đây, nhưng không phải sáp nhập vào chi nhánh khác
  2. git checkout branch
  3. rake db:migrate di chuyển tất cả các chi nhánh mới được tạo ra

tôi chạy vào som e vấn đề với điều này trong các dự án trước đây, nơi schema.rb được in .gitignore. Mỗi khi tôi nhìn thấy một cái gì đó là sai, tôi đã phải thả cơ sở dữ liệu và tái tạo từ di chuyển, trong khi với schema.rb tôi chỉ có thể tải giản đồ trong phần hai giây và sau đó rake db:seed để tải dữ liệu. Nhưng nó không quan trọng.

Tôi cũng tò mò về vấn đề bạn gặp phải khi hợp nhất schema.rb? Hầu hết thời gian bạn có thể ghi đè tệp này mà không phải lo lắng về các thay đổi (tôi giả sử bạn chưa sửa đổi cấu trúc cơ sở dữ liệu của mình bằng tay) với rake db:dump và chỉ thêm nó làm độ phân giải hợp nhất.

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