2011-01-19 27 views
9

Tôi hiện đang có một kho lưu trữ svn trên máy chủ web được lưu trữ của mình. Tôi làm việc tại địa phương, cam kết thay đổi của tôi vào kho lưu trữ trên máy chủ của tôi, và sau đó chạy một "cập nhật svn" thông qua ssh trong thư mục trực tiếp của tôi khi tôi sẵn sàng để đẩy các thay đổi trực tiếp.Sử dụng SVN Với trang web dàn dựng và trực tiếp

Tôi hiện đang thêm trang web dàn dựng, sẽ nằm trên cùng một máy chủ. Nó sẽ chỉ đơn giản là một thư mục khác trên cùng một máy chủ.

Vấn đề là tôi sẽ thực hiện các thay đổi lớn hơn một chút đối với trang web trên máy chủ dàn dựng có thể mất tới một tuần thử nghiệm. Trong thời gian đó, tôi có thể muốn thực hiện một thay đổi nhỏ về mỹ phẩm cho trang web trực tiếp không yêu cầu thử nghiệm. Chúng ta hãy lấy một ví dụ:

  1. Giả sử địa phương của tôi, dàn dựng, và trang web hoạt động tất cả bắt đầu vào phiên bản 1.
  2. tôi có thay đổi lớn tại địa phương, cam kết cho họ, và cập nhật dàn máy chủ của tôi. Địa phương và dàn dựng đang được sửa đổi 2, trực tiếp vẫn ở trên 1.
  3. Ai đó yêu cầu thay đổi văn bản đơn giản trên trang web trực tiếp.
  4. Ugh. Bây giờ tôi phải hoàn nguyên bản sao cục bộ của mình để sửa đổi 1, thực hiện thay đổi nhỏ và cam kết nó. Bây giờ tôi cập nhật lên trang web trực tiếp để sửa đổi 3, có thay đổi nhỏ.
  5. Tôi muốn tiếp tục thực hiện các thay đổi lớn của mình, vì vậy tôi cập nhật bản sao cục bộ của mình về bản sửa đổi 2 và tiếp tục làm việc.
  6. Và vân vân ....

Điều này buộc tôi phải theo dõi revsions và liên tục được cập nhật và hoàn nguyên. Có cách nào tốt hơn? Tôi cảm thấy như tôi đang sử dụng phân nhánh và các thẻ ở đây, nhưng tôi không hiểu chính xác như thế nào.

Cảm ơn, Jonah

Trả lời

9

Tôi quản lý một cửa hàng phát triển gồm 5 nhà phát triển. Chúng tôi sử dụng SVN theo cách sau cho trang web của chúng tôi:

  • Nhà phát triển cam kết tất cả các cải tiến hoặc sửa lỗi cho chi nhánh 'dev' của chúng tôi trước khi hoàn thành công việc.
  • Công việc được kiểm tra trên một hộp dàn chạy mã mới nhất trong nhánh dev.
  • Sau khi một công việc vượt qua kiểm tra, các sửa đổi cho công việc đó được sáp nhập vào nhánh thân cây của chúng tôi.
  • Máy chủ web trực tiếp của chúng tôi chạy nhánh nhánh. Định kỳ, chúng được cập nhật thông qua một kịch bản 'xuất bản' để cập nhật SVN trên các máy chủ trực tiếp và thực hiện một số việc khác (chẳng hạn như làm xáo trộn và giảm thiểu CSS và JavaScript).

Điều này cho phép các lỗi nhỏ vượt qua các đường ống nhanh chóng và lớn hơn để mất nhiều thời gian cần thiết trong quá trình phát triển và thử nghiệm.

Vì mỗi nhà phát triển chịu trách nhiệm sáp nhập công việc của riêng mình và mỗi hợp nhất bao gồm một nhóm nhỏ hơn các thay đổi mã, chúng hoạt động khá suôn sẻ. Đó là ít hơn nhiều so với mô hình cũ hơn của việc có một người quản lý hợp nhất tạo ra một chi nhánh tăng cường lớn cho một tập hợp các cải tiến. Vì các nhà phát triển khác thường làm việc cùng nhau trên một bộ cải tiến, bạn sẽ kết thúc với một người quản lý hợp nhất đã hợp nhất mã họ không viết, điều này trở nên đặc biệt bực bội khi bạn có xung đột hợp nhất.

Thực tế, phương pháp này phản ánh các phương pháp mà các hệ thống phiên bản như Git và Mercurial cố gắng quảng bá bằng cách chúng cấu trúc các kho lưu trữ của chúng. Với những hệ thống phiên bản này, mỗi nhà phát triển có kho lưu trữ 'cục bộ' của riêng mình. Khi họ muốn thay đổi từ một kho lưu trữ khác, họ phải hợp nhất chúng với mã cục bộ của chúng, sau đó cam kết một phiên bản 'hợp nhất' hợp lệ.

Bạn cũng có thể sử dụng gắn thẻ như Andy đã đề cập trong câu trả lời cho câu hỏi này. Nó có thể làm việc cho bạn, nhưng tôi muốn đặt trách nhiệm sáp nhập vào các nhà phát triển viết mã chứ không phải là một nhà phát triển cấp cao hoặc người quản lý xuất bản trung tâm. Họ có xu hướng đi suôn sẻ hơn theo cách đó.

+0

+1 cho phương pháp của bạn. Tôi nghĩ rằng phương pháp của bạn có thể phù hợp hơn cho các trang web. Tôi sử dụng gắn thẻ rất nhiều vì điều quan trọng là nhóm của tôi luôn có thể lấy mã chính xác cho bất kỳ thứ gì đã được phát hành, nhưng tôi có thể thấy đây không thực sự là một yêu cầu khó đối với hầu hết các trang web. –

+0

@Andy: Thật vậy. Một trang web đang hoạt động thấy rất nhiều chỉnh sửa và xuất bản trong suốt tuổi thọ của nó mà việc tách biệt các bản sửa lỗi với các nhánh gây ra chi phí đáng kể hơn.Phương pháp của bạn là phù hợp hơn cho các dự án có 'phiên bản' khác biệt mà có thể được ra trong lĩnh vực này, tất nhiên. Tuy nhiên, đối với một dự án có nhiều thay đổi nhỏ và chỉ có một 'phiên bản', sự khác biệt về gắn thẻ và phân nhánh từng mã lỗi ít hữu ích hơn. – Shaun

1

Như bạn đã xác định cách tốt nhất để làm điều này là sử dụng phân nhánh và gắn thẻ. Một ví dụ tốt về cách thực hiện điều này sẽ như sau.

phát triển chủ yếu

  1. Bạn làm phát triển chính của bạn trên thân cây.
  2. Bất cứ khi nào bạn phát hành bản sao phần mềm của mình để phát trực tiếp, bạn tạo thẻ từ thân cây và chuyển trang web của bạn để trỏ vào thẻ mới.

Khi bạn cần phải thực hiện một sự thay đổi nhỏ để sống bây giờ bạn có thể làm như sau:

  1. Tạo một chi nhánh từ thẻ trực tiếp, và làm việc ở đây.
  2. Khi bạn hài lòng với thay đổi này, bạn tạo một thẻ mới từ chi nhánh này và chuyển bản sao làm việc trực tiếp của bạn sang thẻ mới.
  3. Bạn cũng có thể hợp nhất thay đổi này từ chi nhánh vào thân cây để thay đổi này cũng có trong phiên bản chính tiếp theo của bạn.

Có một cuốn sách lệ phí thực sự tốt trên lật đổ mà giải thích điều này tất cả các chi tiết dữ dội ở đây:

http://svnbook.red-bean.com/

Nếu bạn có thể tìm ra thời gian tôi muốn khuyên đọc.

+0

Andy, bản sao cục bộ thực tế tôi đang làm việc trên latptop của tôi có được thay đổi liên tục từ nhánh này sang nhánh khác hay không, tùy thuộc vào những gì tôi đang làm? – Jonah

+0

Với phương thức của Andy, bạn cần phải tạo và thay đổi một nhánh mới trên hệ thống cục bộ của bạn cho từng thay đổi nhỏ, sau đó hợp nhất nó. Những thay đổi chính của bạn sẽ xảy ra trong thân cây và bạn sẽ 'giải phóng' bằng cách gắn thẻ thân cây, sau đó cập nhật máy chủ sản xuất của bạn lên thẻ đó. – Shaun

+0

@Jonah: bạn có nhiều hơn một bản sao làm việc đã được kiểm tra. Ví dụ: Nếu tôi đã có một dự án 'foo' thì tôi có thể có' C: \ Projects \ Foo \ Trunk' và 'C: \ Projects \ Foo \ v1.1-Bugfix' được kiểm tra cùng lúc (ở đâu 'c: \ Projects \ Foo' không nằm trong điều khiển phiên bản). –

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