Làm cách nào tôi có thể quản lý đúng các cam kết, ngăn ngừa xung đột tính năng và quản lý các phụ thuộc với VCS?


9

Nó trở thành một yếu tố gây khó chịu khi làm việc với các nhóm lớn: làm thế nào để bạn quản lý các đăng ký và ngăn ngừa xung đột tính năng và quản lý các phụ thuộc với kiểm soát nguồn đúng cách?

Hiện tại tại nơi làm việc của tôi, chúng tôi sử dụng TFS 2008 và chúng tôi sẽ chuyển sang TFS 2010 vào đầu tháng 12. Thứ nhất, bất kỳ kiểm soát nguồn nào tốt hơn không có nhưng cách tiếp cận nào có ai thấy hữu ích để ngăn chặn nhiều lần kiểm tra và khôi phục tất cả lịch sử kiểm soát nguồn? Là một thân cây dễ bay hơi là cách tốt nhất để tắt hoặc rẽ nhánh khi bạn thực hiện một tính năng mới và một khi bạn hài lòng trở lại vào thân cây?

Tôi thực sự muốn nghe người khác trải nghiệm và có lẽ một số thực tiễn tốt nhất để quản lý kiểm soát nguồn.



3
Giải pháp tốt nhất tôi tìm thấy để đối phó với TFS là có GIT riêng của mình, nơi tôi có thể xáo trộn với tất cả các nhánh tôi cần và thực hiện các cam kết trên TFS trên các mốc nhỏ (tính năng nhỏ, tính năng một phần) càng nhỏ càng tốt nhưng bạn cũng phải đảm bảo mã là âm thanh khi bạn cam kết. Trên một nhánh cho mỗi tính năng / sửa lỗi / lặp, tôi sẽ cam kết với TFS ở cuối "nhánh". Tuy nhiên, bên trong tôi khá phổ biến khi có nhiều chi nhánh cho các thử nghiệm và khám phá khác nhau. Các công cụ TFS Power ở đây khá hữu ích để tự động hợp nhất trở lại
Newtopian

1
Vui lòng giải thích thêm về ý nghĩa của bạn bằng "nhiều đăng ký" và "vi phạm thân cây". Tôi thực sự hy vọng rằng mỗi kỹ sư của tôi sẽ thực hiện nhiều hơn một lần đăng ký trong khi các thành viên trong nhóm của tôi.
Manfred

chiến lược phân nhánh kiểm soát nguồn là một chủ đề lớn. lập trình
viên.stackexchange.com/questions/107884 / từ

@ John - Tôi nghĩ "vi phạm" là một lỗi đánh máy cho "dễ bay hơi"
ChrisF

Câu trả lời:


7

TFS? Chạy cho những ngọn đồi! Di chuyển ra càng nhanh càng tốt. Nó làm rất nhiều thứ khác nhau nhưng không có cái nào tốt như những công cụ tốt nhất hiện có.

Nhưng nghiêm túc:

Khi bạn có một hệ thống kiểm soát phiên bản phù hợp (SVN, GIT, v.v.), tôi khuyên bạn nên thiết lập các quy tắc để quản lý chi nhánh, ví dụ: khi nào tạo chi nhánh, khi nào nên hợp nhất, ai và nhiều hơn nữa.

Cho đến gần đây, chúng tôi đã sử dụng một nhánh duy nhất để phát triển mới ('thân cây'). Để phát hành, chúng tôi sẽ tạo một nhánh ra khỏi thân cây. QA cuối cùng sẽ được thực hiện tại chi nhánh đó và sau khi hoàn thành, chúng tôi sẽ phát hành (chúng tôi đang phát hành hàng tháng).

Chúng tôi đã chuyển sang khái niệm 'không có rác trong cốp xe' để giảm rủi ro lịch trình. Khái niệm này về cơ bản chứa một quy tắc theo đó bạn tạo các nhánh cho công việc phát triển tách biệt với thân cây. Ví dụ: bạn có thể có một nhánh riêng cho một tính năng, cho một nhóm phát triển nhỏ hoặc tương tự. Chúng tôi sử dụng 'sử thi' để mô tả một tính năng nhỏ hoặc một phần đáng tin cậy của một tính năng và tạo một nhánh cho mỗi sử thi. Ít nhất một lần một ngày tất cả các thay đổi từ thân cây được hợp nhất vào nhánh sử thi. Key là hỗ trợ hợp nhất tốt bởi kiểm soát phiên bản hoặc một công cụ riêng biệt (ví dụ: hợp nhất ba cách). QA cho sử thi sẽ được thực hiện trên nhánh sử thi. Sau khi vượt qua nhánh sử thi sẽ được sáp nhập vào thân cây và một bài kiểm tra tích hợp sẽ được chạy. Chúng tôi vẫn có chi nhánh để phát hành.

Với các nhánh sử thi, chúng tôi đã giảm đáng kể rủi ro lịch trình vì hiện tại chúng tôi đang ở trong một vị trí để phát hành ra khỏi thân cây và bao gồm tất cả các sử thi đã được sáp nhập thành công vào thân cây. Epics không hoàn thành bỏ lỡ xe buýt và sẽ phát hành tiếp theo (tháng tới).

Điều này tất nhiên có thể chỉ làm việc trong môi trường của chúng tôi. Rất có khả năng bạn sẽ có các yếu tố khác với chúng tôi sẽ ảnh hưởng đến những lựa chọn tốt nhất cho quản lý chi nhánh.

Ví dụ: nếu bạn có một nhóm có nhiều người làm việc từ xa và không phải lúc nào cũng được kết nối với máy chủ kiểm soát phiên bản, thì bạn sẽ muốn sử dụng hệ thống kiểm soát phiên bản hỗ trợ mô hình phân tán. GIT và một vài người khác sẽ rơi vào loại này. TFS theo hiểu biết tốt nhất của tôi yêu cầu kết nối với máy chủ để chỉ tạo các tệp có thể ghi (cố định trong phiên bản 2010?).

Tôi hy vọng tôi có thể chỉ ra rằng không có "một kích thước phù hợp với tất cả". Bắt đầu với các quy trình của bạn trong quản lý chi nhánh cụ thể, xác định các yêu cầu và cuối cùng chọn công cụ phù hợp nhất cho nhu cầu của bạn. Có lẽ đó là TFS, có thể không.


2
"TFS? Chạy lên đồi!" - Tôi muốn tạo một tài khoản thứ hai để tôi nâng cấp tài khoản này hai lần.
Kiến

Thật tốt khi biết rằng điều này làm việc cho bạn. Tôi đã từng tham gia các dự án tương tự, nơi điều này là bắt buộc. Nhưng cách bạn thực hiện hợp nhất các nhánh "sử thi" làm cho âm thanh trở nên dễ dàng. Tôi muốn nói rằng nó nhiều khả năng là một nỗi đau khủng khiếp mỗi lần.
Lionel

1
@Lionel: Tôi đồng ý, điều này có thể xảy ra. Tôi cũng đã thấy một cái gì đó tương tự trong quá khứ sẽ sai lầm khủng khiếp. Theo kinh nghiệm của tôi, chìa khóa để sử dụng thành công phương pháp này là giữ cho vùng đồng bằng giữa thân cây và các nhánh tính năng càng nhỏ càng tốt. Ít nhất một lần một ngày bạn cần hợp nhất từ ​​thân cây. Tương tự, nó trả hết để có các sử thi / tính năng nhỏ như khả thi, ví dụ như nhiều hơn trên thang ngày / tuần so với nhiều tháng. Vô cùng có lợi cũng là một kiến ​​trúc và thiết kế sạch sẽ và một mã được tái cấu trúc (đầy đủ).
Manfred

@ John Hoàn toàn đồng ý với nhận xét cuối cùng của bạn. Vấn đề chính tôi gặp phải trong quá khứ là "các tính năng mới" thường lớn, phức tạp và chứa các thay đổi thiết kế đối với mã hiện có trong trung kế. Chúng có thể mất vài tháng để thực hiện và thử nghiệm. Hợp nhất những thứ này vào thân cây sẽ là một cơn ác mộng khi có nhiều hơn một nhóm làm việc trên các tính năng khác nhau.
Lionel

4

Tôi ủng hộ một chi nhánh cho mỗi tính năng vì nó cho phép rất linh hoạt khi quyết định tính năng nào sẽ được gửi và trì hoãn.

Mức độ hoạt động trong tình huống của bạn phụ thuộc vào mức độ VCS của bạn xử lý các nhánh tốt và quan trọng hơn là hợp nhất. DVCS như Git & Mercurial làm cho điều này một bài tập tương đối tầm thường. SVN ít vậy. Tôi đã cố gắng tránh TFS mặc dù tôi đã đọc rất nhiều về nó, chủ yếu là không đơn giản, tôi sợ. Nếu bạn bị mắc kẹt với TFS, hãy thực hiện một bản phát hành thử nghiệm nhỏ dựa trên một tính năng cho mỗi chi nhánh và xem việc hợp nhất sẽ giúp bạn tốt như thế nào.


2

Thứ nhất, từ chối trách nhiệm. Thật khó để nói đâu là cách tốt nhất để quản lý nguồn của bạn, vì chúng tôi không nhận thức được cách nhóm của bạn hoặc nhóm làm việc hàng ngày.

Nói chung, tốt hơn là làm việc trên thân cây. Đối với mỗi bản phát hành chính, hãy phân nhánh nó - để sửa lỗi cho phiên bản phát hành nằm trên nhánh có thể được hợp nhất trở lại vào thân cây. Tất cả các nhà phát triển làm việc trên thân cây và cam kết mã thường xuyên (tối thiểu một lần một ngày).

Hợp nhất mã mới thường xuyên giảm thiểu nỗi đau của việc hợp nhất trong các đoạn mã lớn trong giai đoạn tích hợp lớn. Bằng cách trải ra nỗi đau, bạn sẽ cảm thấy nó ít hơn. Các thành viên trong nhóm của bạn càng thường xuyên cam kết mã, họ sẽ càng ít phải hợp nhất - bởi vì họ sẽ luôn ở trên nguồn mới nhất.


2
Tôi hoàn toàn không đồng ý làm việc trên thân cây. Nếu thân cây bị hỏng mọi người sẽ bị ảnh hưởng. Tôi cũng không đồng ý phân nhánh sau một bản phát hành chính, nếu một lỗi ảnh hưởng đến hai hoặc nhiều bản phát hành, bạn có sửa nó trong mỗi nhánh không?
Trasplazio Garzuglio

@ marco-dinacci: Những gì bạn đang nói có thể đúng nếu bạn có nhiều hơn một bản phát hành được duy trì bất cứ lúc nào. Tuy nhiên, bạn đang bỏ qua thực tế là các bản sửa lỗi cho các lỗi đó sẽ được hợp nhất trở lại vào thân cây. Các bản phát hành khác sau đó có thể kéo các thay đổi. Liên quan đến việc phá vỡ thân cây. Trước khi bạn cam kết mã vào trung kế, bạn phải đảm bảo rằng bạn có tất cả nguồn mới nhất và thay đổi của bạn không phá vỡ trung kế. Nếu nó bị hỏng, bạn không nên cam kết cho đến khi nó được sửa. Tất nhiên, tất nhiên có những ưu và nhược điểm đối với các phương pháp khác nhau.
Lionel

1

Tôi chưa bao giờ sử dụng TFS 2008/2010 nhưng từ những gì tôi đã đọc trên nhiều diễn đàn khác nhau, có nhiều tiêu cực về việc sử dụng TFS để kiểm soát phiên bản. Điều này đã làm cho tôi rõ ràng từ TFS cho đến nay.

Tôi hiện đang sử dụng SVN và Git, tôi thấy cả hai đều tốt cho các đội nhỏ hoặc đội một người nhưng cá nhân sẽ không đề xuất SVN cho một đội lớn.

Tôi đã để mắt đến PlasticSCM và sẽ cố gắng làm điều đó trong tương lai gần.

Tôi xin lỗi vì đã không trả lời câu hỏi cụ thể của bạn, sẽ đăng một bình luận nếu đặc quyền của tôi cho phép tôi.


1

Tôi nghĩ rằng git làm cho tất cả các phần mềm kiểm soát nguồn khác lỗi thời. Phân nhánh và hợp nhất là dễ dàng, và nếu có vấn đề, nó được ngăn chặn, nhưng rất nhiều vấn đề được tránh bằng cách nó khuyến khích các cam kết, phân nhánh và sáp nhập rất thường xuyên. Mỗi người dùng nhận được một bản sao đầy đủ của repo (cái này có thể được cắt tỉa, nhưng tôi làm việc với một cơ sở mã khá lớn và nó không phải là vấn đề), vì vậy có một cái gì đó của bản sao lưu tự động. Cam kết / đẩy / kéo rất nhanh và một trong những điều quan trọng nhất là nó phá vỡ khớp nối giữa tên tệp và theo dõi. Dữ liệu tệp, bao gồm tên và đường dẫn, là một đốm dữ liệu được tham chiếu bởi một nút cây, độc lập với các đường dẫn. Điều này không chỉ an toàn hơn, mà một số loại "không bao giờ làm điều đó" trong một số vấn đề như SVN không phải là vấn đề. Nó có thể được sử dụng như một cấu hình trung tâm truyền thống hoặc ngang hàng, và những sử dụng đó có thể được trộn tự do trong cùng một thiết lập. Nó được bảo mật bằng mật mã chống lại sự chèn ép không có giấy tờ. Và nó rất nhanh.

Tôi thấy tôi sử dụng nó ở nhà mọi lúc, chỉ để theo dõi tài liệu và đồng bộ hóa chúng giữa các máy tính, bởi vì việc cam kết và đẩy vào máy chủ tệp dễ dàng hơn là sao lưu nó vào máy chủ hoặc lưu nó ở đó.

Hạn chế là một chút của đường cong học tập dốc, vì nó phá vỡ tất cả các quy tắc mà mọi người đã quen với kiểm soát nguồn, theo những cách tinh tế, nhưng đó là một đường cong học tập dốc ngắn.


1
Git thực sự tốt, nhưng (giống như mọi thứ) nó không phải là giải pháp tốt nhất cho mọi người & mọi thứ. lập trình
viên.stackexchange.com/questions / 111633 / Mạnh

4
Git làm cho Mercurial trở nên lỗi thời theo cách nào? Đặc biệt là trong môi trường phát triển Windows. Sẽ tốt hơn khi nói DVCS làm cho các VCS khác trở nên lỗi thời thay vì gặm một quả bom xăng và bắt đầu một cuộc chiến tranh thần thánh.
đánh dấu

@mcottle - Tôi sẽ không đi xa đến thế. SVN chẳng hạn là một ví dụ điển hình về chất lượng không phân phối VCS. Chúng ta có thể nói rằng SVN làm cho CVS trở nên lỗi thời, nhưng tôi sẽ dừng ở đó. Git không theo bất kỳ cách nào làm cho SVN trở nên lỗi thời - đó là một cách tiếp cận hoàn toàn khác, tốt cho một số người, nhưng xấu cho một số cách tiếp cận khác (để biết thêm liên kết ở trên). Ví dụ, cả Git và Hg tương đối "hút" với các tệp nhị phân.
Rook

@ldigas: Làm thế nào để git và hg "hút" tệ hơn với các tệp nhị phân so với svn? Không thể theo dõi các thay đổi trong nhị phân ngoài mức độ chi tiết của mỗi tệp, với tất cả các hậu quả liên quan. Ngoài ra, cả hai đều làm cho svn trở nên lỗi thời, xem làm thế nào hoặc có thể làm chính xác những gì svn làm (ngoài một vài tính năng tối nghĩa), và sau đó một số; bạn chỉ cần thiết lập nó theo cách đó. Lý do tốt nhất để sử dụng svn mà tôi có thể nghĩ đến là bạn đã sử dụng nó và việc di chuyển sẽ quá đau đớn / rủi ro / tốn kém.
tdammers

@tdammers - Tôi không quan tâm đến một cuộc thảo luận trolling. Đối với bất kỳ điểm nào ở trên, google một chút và bạn sẽ vấp phải thứ gì đó khá nhanh.
Rook

1

Một số thực hành tốt mà chúng tôi thực sự tuân theo và giúp chúng tôi rất nhiều:

1) Hãy chắc chắn rằng bạn không có một bản sao có thể ghi của tệp trong địa phương của bạn và bạn luôn luôn kiểm tra để chỉnh sửa. (Nếu đôi khi bạn phải làm việc cục bộ, thì hãy thử hợp nhất nó trong kiểm soát nguồn trước EOD.)

2) Dán nhãn tệp của bạn theo định kỳ, sau bất kỳ cột mốc quan trọng nhỏ nào.

3) Đưa ra ý kiến ​​kiểm tra hoặc kiểm tra tốt. Điều này sẽ giúp ích khi bạn xem xét, đôi khi bạn không phải mở và so sánh giữa các phiên bản.


1

Làm thế nào để bạn quản lý đăng ký và ngăn ngừa xung đột tính năng và quản lý các phụ thuộc với kiểm soát nguồn đúng cách?

Đó là, từ POV của tôi, nhiệm vụ hai yếu tố: bạn phải thực hiện nó từ các khía cạnh kỹ thuật (tốt và dễ dàng & chống đạn | sáp nhập | kiểm toán, v.v.) và quản lý (chính sách được thiết lập tốt "những gì" "khi" "làm thế nào"). Hai hoặc thậm chí ba tầng mã tách trong ALM: một cái gì đó như "ổn định" (đã qua kiểm tra đơn vị), "không ổn định" (mọi tính năng được bao gồm đã hoàn thành, nhưng ứng dụng như sản phẩm có câu hỏi sau tích hợp / có, nó có thể xảy ra /) và " công việc đang tiến triển ". Bằng cách này, Trình quản lý dự án phù hợp có thể làm giảm sự can thiệp của công việc của nhà phát triển riêng biệt.

TFS (mà tôi không sử dụng, sử dụng và sẽ không sử dụng) có một số, AFAIK, các vấn đề cơ bản trong khía cạnh của Quản lý kiểm soát nguồn. Tôi chỉ liên kết ở đây với một số văn bản của James McKay:


1

Một bài viết thực sự hay và gần đây có thể so sánh rõ ràng và chính xác một số cách làm việc khác nhau với kiểm soát nguồn ở đây: Kiểm soát nguồn được thực hiện đúng .

Tôi không nghĩ có một chiến lược / cách thực hành tốt nhất để sử dụng kiểm soát nguồn. Các đội trưởng thành đã làm việc cùng nhau trong một thời gian dài có ít "nỗi đau" hơn trong lĩnh vực này ngay cả khi họ không thực sự tuân theo "các thực tiễn tốt nhất" phổ biến.

Đối với công cụ nào ... Nó gần như không thành vấn đề. Điều thực sự quan trọng là có tất cả mọi người trong nhóm của bạn ở cùng một trang cho đến khi sử dụng. Điều này có nghĩa là mọi người cần phải hiểu cách quản lý dòng mã và những gì họ dự kiến ​​sẽ làm. Và dù sao đi nữa, trong thực tế, bạn thường không có lựa chọn sử dụng công cụ nào. Tận dụng tốt nhất mọi thứ bạn đang sử dụng.

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.