Các kho lưu trữ lớn có phải chịu một cuộc đua đẩy mạnh không?


9

Đọc một vài câu trả lời "Tại sao DVCS tốt hơn" cho một số câu hỏi trên Lập trình viên. Tất cả họ dường như nói rằng, nói chung, DVCS tốt hơn vì bạn không có một cuộc đua cam kết trong các dự án lớn, IE cam kết, đã lỗi thời cập nhật, cam kết, hết hạn một lần nữa, cam kết, vẫn hết hạn, v.v.

DVCS giới hạn điều này với khái niệm đẩy. Tuy nhiên, trong các dự án rất lớn sẽ không có một "cuộc đua đẩy", đặc biệt là vào cuối ngày? Tôi biết trong Git, điều này phần nào được khắc phục bằng cách phân nhánh liên tục cho mọi thứ, nhưng trong Mercurial bạn không phân nhánh, bạn tạo ra một cái đầu mới.

Vấn đề tôi thấy

  1. Người dùng cố gắng đẩy
  2. Hết hạn (mercurial sẽ không cho phép bạn đẩy nếu repo cục bộ của bạn đã hết hạn), vì vậy bạn kéo và hợp nhất các thay đổi cục bộ của bạn
  3. Người dùng cố gắng đẩy lại nhưng trong khi họ đang hợp nhất thì người khác lại đẩy, vì vậy họ lại hết hạn
  4. Kéo và hợp nhất lại
  5. Vẫn còn lỗi thời
  6. Nói lại

Nghe có vẻ quen?

Đây có phải là một vấn đề thực tế với reposururur rất lớn và phổ biến? Thế còn bên trong một công ty khi tất cả mọi người thực hiện cú hích cuối cùng trong ngày?


Ai không chi nhánh trong đồng bóng? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers

@Carson Trong các chi nhánh git có giá rẻ. Trong đồng bóng họ thường xuyên hơn nhiều. Nói chung, tôi đã nghe nói rằng trong git, bạn phân nhánh để làm việc trên một tính năng, trong đồng bóng, bạn tạo một đầu mới hoặc sao chép vào một thư mục khác.
TheLQ

tốt, bạn có thể thêm một --close-branchkhi cam kết - và đồng bóng đã đặt tên các nhánh, bạn không phải sao chép vào một thư mục mới
Carson Myers

@Carson Tôi không nói rằng bạn không thể hoặc điều đó là không thể, tôi chỉ nói rằng tôi luôn nghe rằng quy ước là sao chép hoặc tạo ra một cái đầu mới, không phải là chi nhánh. Hầu hết các repos đồng bóng mà tôi thấy chỉ có một vài chi nhánh trong khi các repos git có xu hướng có một bó
TheLQ

Tôi không chắc chắn, tôi chưa bao giờ sử dụng git
Carson Myers

Câu trả lời:


8

Theo như tôi biết hầu hết các dự án nguồn mở lớn sử dụng DVCS sử dụng "yêu cầu kéo" thay vì đẩy, tức là người dùng yêu cầu dự án lấy từ chi nhánh của họ và dự đoán có thể chọn thực hiện các yêu cầu kéo này theo bất kỳ thứ tự nào , nếu có Điều này giúp loại bỏ các nhu cầu cho "cuộc đua đẩy", như bạn đã đặt tên cho nó.

Ở các công ty khác, tôi không thể đảm bảo quy trình, nhưng nơi tôi làm việc thì đây không phải là vấn đề.

Hãy xem, khi bạn đang làm việc trong một trường hợp bạn đang làm việc trên một nhánh của toàn bộ repo, vì vậy các yêu cầu đẩy của bạn chuyển đến một phiên bản từ xa của thân cây chính. Khi bạn muốn tích hợp thay đổi (đã hoàn thành) của bạn vào thân cây bạn tải lên thân cây, kéo, hợp nhất, đẩy.

Thỉnh thoảng ( rất thỉnh thoảng) hai người sẽ thử và làm điều này cùng một lúc (thông thường do một số thông tin sai lệch). Trong trường hợp này, bất cứ ai "thua" sẽ chỉ phải kéo lại, hợp nhất, đẩy. Vì không có 5 giờ chiều để cam kết với một kho lưu trữ trung tâm, vấn đề bạn nêu ra không thực sự ở đó.

Đó là nét đẹp của DVCS: phân nhánh không gây đau đớn, vì vậy mọi người đều có thể làm việc trên nhánh của mình.

BIÊN TẬP

Ồ, tôi vừa nhận thấy bình luận "Trong đồng bóng bạn không phân nhánh ...": Vâng, bạn có. Bạn không cần phải làm vậy, nhưng vì nó rất dễ và lợi ích của việc làm đó vượt trội hơn không làm rất nhiều, nên bạn có xu hướng chỉ chi nhánh repos rất nhiều.


Tôi đã luôn nghe nói rằng bạn nhân bản để làm việc trên các tính năng thử nghiệm, không phải chi nhánh. Hầu hết các lý do tôi nghe được là trong các nhánh đồng bóng thường xuyên hơn nhiều so với Git. Tôi có thể sai tuy nhiên
TheLQ

Đó là điều, theo như liên quan đến đồng tính, một bản sao một nhánh, bạn vẫn có thể làm hầu hết mọi thứ bạn có thể làm với một "cái đầu" tiêu chuẩn (và một số thứ nữa!), Nhưng bạn có thêm sự sang trọng của việc kéo / đẩy mức khoảng cách từ thân cây. Tôi không chắc ý của bạn về sự trường tồn, khi bạn hoàn thành bản sao của mình, bạn có thể xóa nó đi.
Ed James

Làm thế nào đến không có 5pm đẩy vội vàng?
Cem Catikkas

Như tôi đã nói, hầu hết thời gian mọi người đều làm việc trên chi nhánh của riêng họ (bạn rất khó có thể làm việc với cùng một vấn đề như người khác), vì vậy, trong khi mọi người đều đẩy vào cuối ngày thì đến các chi nhánh khác. Thêm vào đó, trong công việc của tôi, chúng tôi có thời gian linh hoạt vì vậy đó là thời gian gấp 4 giờ chiều đến 6 giờ chiều;)
Ed James

1

Không, không có cuộc đua đẩy vì công việc được thực hiện trong các nhánh chủ đề . Một bậc thầy hợp nhất quản lý sự phức tạp (tương đối thấp hơn) của việc kết hợp các nhánh thành một nhánh tích hợp . Điều này thường được thực hiện liên tục. Để biết thêm thông tin về quy trình kiểm soát phiên bản phân tán, nguồn đầu tiên sẽ là miệng ngựa : man gitworkflows, trực tuyến tại đây . Quy trình công việc Mercurial làm sử dụng nhánh bất chấp tuyên bố của bạn và các kỹ thuật tương tự.


OP đang phân biệt git và hg ở đây nhưng câu trả lời của bạn là dành cho git (ví dụ liên kết đầu tiên rất định hướng git). Đó là một câu trả lời đúng (vì cách hiểu sai ban đầu của OP về phân nhánh trong hg dẫn đến chính câu hỏi), nhưng đáng chú ý là nó giống với hg.
Ed James

@Ed Điểm tốt, được cập nhật để làm rõ rằng câu trả lời áp dụng cho cả git và mercurial.
Rein Henrichs

xem kho git.git, đây là một ví dụ hay về việc hợp nhất bằng cách sử dụng DVCS. Có rất nhiều điểm hợp nhất. Có thể có hơn 10 chi nhánh tạm thời cùng một lúc trước khi cuối cùng được sáp nhập vào chi nhánh chính.
linquize
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.