Kỹ thuật lật đổ tiên tiến, tôi còn thiếu gì?


10

Tôi đã bắt đầu sử dụng SVN khoảng 9 tháng trước và đó là điều ít thay đổi trong trò chơi. Mặc dù, tôi cảm thấy tôi vẫn còn một chút mất mát. Tôi cảm thấy như có nhiều hơn nữa tôi cần tận dụng để thực sự đẩy mạnh phát triển ứng dụng của mình.

Ví dụ

Tôi muốn có thể cách ly mọi thay đổi dễ bay hơi / chính thành một loại 'kho lưu trữ phụ' hoặc một cái gì đó. Tôi thấy rằng những thay đổi lớn đang cản trở các sửa lỗi nhỏ khá cấp bách. Làm cách nào tôi có thể đẩy một bản cập nhật đơn giản mà không đẩy mã không đầy đủ hoặc bị hỏng?


3
Bạn có thể muốn xem xét sử dụng hg cho các chi nhánh địa phương của mình (bạn có thể sử dụng nó với svn tốt, kiểm tra điều này )
OneOfOne

Hà! Bạn đang mất tích.
DexterW

3
"Subversion nâng cao" nghe giống như một oxymoron. Sử dụng Git hoặc Mercurial, nếu chỉ cục bộ.
Macneil

Câu trả lời:


7

Để giải quyết ví dụ của bạn, bạn có ba khả năng để làm điều đó:

  1. Bạn có thể cam kết các tập tin duy nhất. Nếu bạn sử dụng IDE để truy cập Kho lưu trữ, rất có thể nó có dạng xem, để chọn hoặc bỏ chọn các tệp đơn trước khi cam kết. Trên dòng lệnh, bạn gõ svn commit file1 path1/file2 path2để xác nhận file1, path1 / file2 và mọi thay đổi trong path2.
  2. Bạn có thể tạo các bản sao làm việc khác nhau. Bạn làm việc trên tính năng lớn của bạn trong bản sao làm việc tiêu chuẩn của bạn và nhận thông tin về lỗi khẩn cấp. Bạn có thể kiểm tra kho lưu trữ của mình vào một thư mục khác và sửa lỗi trong bản sao làm việc thứ hai này. Bạn thậm chí có thể kiểm tra chỉ một thư mục con với thành phần xảy ra lỗi. Sau khi sửa lỗi, bạn có thể cam kết trong bản sao làm việc thứ hai của mình mà không cam kết công việc của bạn trên tính năng lớn. EDIT: Cách đó cũng được mô tả trong câu trả lời của Anna Lear.
  3. Bạn tạo một nhánh cho công việc trên tính năng của bạn. Cho rằng bạn sử dụng lệnh sao chép. Nếu bạn sử dụng bố cục tiêu chuẩn cho kho lưu trữ của mình (thư mục có tên dự án và thư mục con với tên thân cây, thẻ và nhánh, thân chứa dự án), bạn có thể sử dụng lệnh svn-copy-like như sau để tạo nhánh : svn copy svn://hostname/projectname/trunk svn://hostname/branches/branch-for-feature-X. Bây giờ bạn có thể chuyển bản sao làm việc của bạn sang vị trí mới: svn switch svn switch svn://hostname/projectname/branches/branch-for-feature-X. Nếu bạn chuyển sang chế độ sửa lỗi, bạn cam kết thay đổi thực tế của mình, chuyển bản sao làm việc của bạn trở lại trung kế, sửa lỗi và cam kết và chuyển bản sao làm việc trở lại nhánh tính năng của bạn. Nếu bạn đã sẵn sàng với việc phát triển tính năng, bạn có thể hợp nhất nó trở lại thân cây.

Đối với trường hợp đơn giản được mô tả, bạn thường sẽ sử dụng # 1 (tôi sử dụng thường xuyên nhất), đôi khi # 2. Làm việc với các nhánh (trường hợp số 3) phức tạp hơn ( đọc thêm ), nhưng cho phép nhiều thủ thuật hơn. Nhưng các chi nhánh phù hợp với mô tả của bạn về một tiểu khu.

Ngoài ra từ ví dụ của bạn tôi không thể nói nhiều. Có nhiều điều về Subversion, nhưng tôi không biết những gì bạn đã sử dụng và những gì bạn cần cho dự án của bạn. Để tìm hiểu thêm về SVN, SVN-Book là một tài nguyên tuyệt vời: http://svnbook.red-bean.com/


3
Vấn đề với cách tiếp cận số 1 là bạn không thể luôn biết trước rằng tính năng mới của bạn và sửa lỗi sẽ không liên quan đến các thay đổi đối với cùng một tệp. Vì lý do này, tôi khuyên bạn nên # 2 (bản sao làm việc riêng cho từng tính năng hoặc sửa lỗi) hoặc # 3 (chi nhánh riêng cho từng tính năng hoặc sửa lỗi). Các chi nhánh có lợi thế bạn có thể thực hiện các thay đổi trên một chi nhánh trước khi tính năng hoặc sửa lỗi hoàn tất mà không ảnh hưởng đến việc kiểm tra từ thân cây (với các bản sao làm việc riêng biệt, tất cả các cam kết đều ảnh hưởng đến trung kế).
Stephen C. Steel

7

Bạn có thể kiểm tra mã vào các hộp cát khác nhau thay vì chỉ lấy một bản sao và thực hiện tất cả các thay đổi của mình ở đó.

Vì vậy, bạn có thể có một cấu trúc thư mục giống như thế này:

D:\Dev\MajorFeature1
D:\Dev\Bug12345
D:\Dev\MajorFeature2

Vân vân.

Tất cả những thứ đó có thể được kiểm tra từ cùng một vị trí trong SVN của bạn, vd http://mysvnrepo/trunk .

Bằng cách này, bạn có thể cam kết từ hộp cát sửa lỗi của mình mà không ảnh hưởng đến các tính năng phát triển tính năng, mặc dù bạn sẽ cần phải chạy svn updatetừ các hộp cát khác để nhận các thay đổi đã cam kết cho việc sửa lỗi.


4

Bạn đã xem chi nhánh Subversion chưa?

Một kỹ thuật phổ biến là giữ cho Trunk của bạn ổn định, áp dụng các bản sửa lỗi quan trọng theo yêu cầu. Sau đó, bạn tạo một nhánh cho mỗi phần công việc quan trọng mới. Các nhà phát triển làm việc trong dự án đó kiểm tra chi nhánh và cam kết với chi nhánh. Nó không ảnh hưởng đến Trunk cho đến khi bạn quyết định hợp nhất nhánh trở lại thân chính như là một phần của sự tích hợp cuối cùng của bạn.

Một cách tiếp cận khác là có một chi nhánh cho một Bản phát hành cụ thể, để tránh mọi công việc khác vô tình được thực hiện trên thân cây gây ra sự cố. Bạn có thể sửa lỗi 'Chi nhánh phát hành' theo yêu cầu và sau đó gập các bản sửa lỗi đó trở lại thân cây khi sẵn sàng.

Các nhà phát triển của bạn có thể kiểm tra nhiều bản sao làm việc - thân cây và bất kỳ nhánh nào - hoặc có thể trao đổi giữa thân cây và một nhánh cụ thể với svn switch lệnh.

Tôi không khuyên bạn nên có nhiều bản sao hoạt động của 'hộp cát' mà bạn nên kiểm tra riêng vì (a) điều này cấm cộng tác với người khác và (b) sẽ quá dễ dàng để vô tình thực hiện các thay đổi chưa hoạt động đối với thân chính.


3

Kích thước hiện tại của bản sao làm việc của tôi là 10 GB, với hơn 50.000 tệp. Tôi có thể có một vài bản sao cho các chi nhánh khác nhau, nhưng phải mất một thời gian chỉ để tạo bản sao mới!

Khi có lỗi khẩn cấp, tôi thường lưu tất cả các thay đổi của mình trong một bản vá, hoàn nguyên mọi thứ, xử lý lỗi và cam kết, sau đó áp dụng bản vá mà tôi đã lưu ... Dễ dàng và nhanh chóng hơn nhiều so với nhận bản sao mới. Nếu tôi cần phải làm điều này thường xuyên, tôi sẽ có hai bản sao làm việc: một cho các thay đổi dài hạn, một cho các sửa lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.