GIT so với Perforce- Hai VCS sẽ tham gia… một VCS sẽ rời khỏi [đóng cửa]


85

Vì vậy, tôi đang trong quá trình bán GIT tại nơi làm việc. Điều đầu tiên tôi cần là thuyết phục mọi người rằng GIT giỏi hơn những gì họ đã quen làm. Chúng tôi hiện đang sử dụng Perforce. Còn ai khác trải qua một đợt mua bán tương tự không? Bất kỳ liên kết / lời khuyên tốt?

Một trong những thắng lợi lớn là chúng tôi có thể làm việc với nó bị ngắt kết nối khỏi mạng. Một IMO chiến thắng khác là cách xử lý thêm / kiểm tra. Thêm điểm được hoan nghênh! Ngoài ra, chúng tôi có tổng số khoảng 10-20 nhà phát triển.

Câu trả lời:


75

Mã nguồn trình thông dịch Perl 5 hiện đang trải qua quá trình chuyển đổi từ Perforce sang git. Có thể git-p4rawquan tâm đến nhà nhập khẩu của Sam Vilain .

Trong mọi trường hợp, một trong những chiến thắng chính mà bạn sẽ có trên mọi VCS tập trung và hầu hết các VCS phân tán cũng là tốc độ thô, chóng mặt . Bạn không thể tưởng tượng được việc có được toàn bộ lịch sử dự án trong tay, chỉ là một phần nhỏ của một giây, cho đến khi bạn đã trải nghiệm nó sẽ dễ dàng đến mức nào. Ngay cả việc tạo một bản ghi cam kết của toàn bộ lịch sử dự án bao gồm sự khác biệt đầy đủ cho mỗi lần cam kết có thể được đo bằng phần nhỏ của giây. Git quá nhanh chiếc mũ của bạn sẽ bay ra. Các VCS phải đi vòng qua mạng đơn giản là không có cơ hội cạnh tranh, thậm chí không qua liên kết Gigabit Ethernet.

Ngoài ra, git giúp bạn dễ dàng lựa chọn cẩn thận khi thực hiện cam kết, do đó cho phép các thay đổi trong bản sao làm việc của bạn (hoặc thậm chí trong một tệp duy nhất) được trải rộng trên nhiều cam kết - và trên các nhánh khác nhau nếu bạn cần điều đó. Điều này cho phép bạn ghi chú ít hơn trong khi làm việc - bạn không cần phải lập kế hoạch công việc quá cẩn thận, quyết định trước những thay đổi bạn sẽ cam kết và đảm bảo trì hoãn bất kỳ điều gì khác. Bạn chỉ có thể thực hiện bất kỳ thay đổi nào bạn muốn khi chúng xảy ra với bạn và vẫn gỡ rối chúng - gần như luôn luôn khá dễ dàng - khi đã đến lúc phải cam kết. Kho chứa có thể là một trợ giúp rất lớn ở đây.

Tôi nhận thấy rằng cùng nhau, những sự thật này khiến tôi tự nhiên thực hiện nhiều cam kết tập trung hơn nhiều so với trước khi tôi sử dụng git. Điều này đến lượt nó không chỉ làm cho lịch sử của bạn nói chung hữu ích hơn mà còn đặc biệt có lợi cho các công cụ gia tăng giá trị như git bisect.

Tôi chắc rằng có nhiều điều mà tôi không thể nghĩ đến lúc này. Một vấn đề với đề xuất bán nhóm của bạn trên git là nhiều lợi ích có liên quan lẫn nhau và chơi trội lẫn nhau, như tôi đã gợi ý ở trên, vì vậy thật khó để chỉ cần nhìn vào danh sách các tính năng và lợi ích của git và suy ra chúng sẽ thay đổi quy trình làm việc của bạn và những thay đổi nào sẽ là những cải tiến mạnh mẽ. Bạn cần phải tính đến điều này, và bạn cũng cần chỉ ra nó một cách rõ ràng.


Theo cáo buộc, p4sandbox cung cấp một số khả năng ngoại tuyến cho p4. Tuy nhiên, tôi vẫn thích git. :)
Dominic Mitchell

13
Git không cung cấp 'khả năng ẩn', nó ẩn. Việc duy nhất bạn gửi dữ liệu qua dây là khi bạn đẩy các cam kết về nguồn gốc hoặc kéo các thay đổi từ các kho lưu trữ phụ khác.
Evan Plaice

2
"Git quá nhanh chiếc mũ của bạn sẽ bay ra" tình yêu đó :) Chỉ có điều nó không đúng lắm khi bạn bắt đầu đăng ký các tệp nhị phân. các repos lớn rất rắc rối trong git.
v.oddou

1
Không may đúng. Cách thức hoạt động của Git phụ thuộc vào việc đọc các tệp và phần nào khác với việc khác biệt chúng, vì vậy chúng cần có kích thước vừa phải và có thể khác biệt tốt. Sau đó, nó sẽ cực kỳ nhanh chóng (như trong ví dụ về lịch sử khác biệt đầy đủ tức thì cho hàng trăm lần cam kết). Với những đốm màu lớn? Không quá nhiều…
Aristotle Pagaltzis

84

Tôi sử dụng Perforce tại nơi làm việc. Tôi cũng sử dụng Git vì tôi vẫn muốn một số hình thức kiểm soát phiên bản khi tôi đang làm việc trên mã và không thể kết nối với máy chủ. Không, điều hòa công việc ngoại tuyến chỉ là không giống nhau. Đây là nơi tôi thấy git là một lợi ích tuyệt vời:

  1. Tốc độ phân nhánh - git mất tối đa vài giây.
  2. Xung đột - giải quyết tự động của P4Merge đã phá hủy công việc của một tuần một lần. Kể từ đó tôi thà giải quyết bằng tay khi hợp nhất. Khi Git nhắc tôi về một xung đột, đó thực sự là một xung đột. Phần còn lại của thời gian, git giải quyết mọi thứ một cách chính xác và tôi tiết kiệm được rất nhiều thời gian.
  3. Theo dõi các hợp nhất - Nếu bạn có một chi nhánh liên tục nhận được hợp nhất từ ​​hai chi nhánh khác, bạn biết điều này có thể gây đau đầu như thế nào với lực lượng. Với git, cơn đau đầu được giảm thiểu vì kết quả của việc hợp nhất trong git thực sự là một cam kết mới biết tổ tiên của nó là ai.
  4. Quyền - Tôi đã mất dấu số lần tôi đã cố gắng làm việc trên một tệp nhưng không được vì nó chưa được đăng xuất trong Perforce. Nếu bạn đã làm việc với XCode (hoặc bất kỳ trình soạn thảo nào không có plugin Perforce SCM) ngoại tuyến, bạn biết điều này có thể gây khó chịu như thế nào. Tôi không phải lo lắng về điều đó với Git. Tôi thực hiện các thay đổi của mình. Git không dừng tôi và theo dõi chúng trong nền.
  5. Giữ cho cây chính gọn gàng - Với git, tôi có thể sắp xếp các cam kết của mình và sắp xếp mã gọn gàng để lịch sử trông đẹp và gọn gàng hơn. Không có cái nào trong số đó "kiểm tra trong tệp này vì nó được cho là một phần của rác đăng ký trước". Tôi cam kết như vậy, bởi vì họ không giúp ai cả.
  6. Stashing - Máy chủ perforce của bạn cần phải là phiên bản 2010.1 hoặc mới hơn để sử dụng lệnh p4 rack.
  7. Tạo bản vá - Dễ dàng thực hiện trong git. Không biết nếu nó có thể trong Perforce mà không cần sử dụng dòng lệnh.
  8. Gửi các bản vá từ GUI - một lần nữa, git thắng ở đây.
  9. Dung lượng đĩa - Với perforce, mọi nhánh là một bản sao. Điều đó có nghĩa là nếu cây nguồn của bạn lớn, không gian đĩa của bạn sẽ bị tiêu hao nhanh chóng. Điều này thậm chí không tính đến không gian bổ sung khi bạn bắt đầu xây dựng. Tại sao thậm chí có một liên kết giữa các nhánh và không gian đĩa? Với git, bạn có thể có 100 chi nhánh và chỉ có một chi nhánh tại một thời điểm tồn tại. Nếu bạn đặc biệt muốn làm việc trên hai phiên bản đồng thời, bạn có thể sao chép, thực hiện công việc của mình và sau đó loại bỏ một bản sao nếu bạn muốn mà không mất gì cả.
  10. Nếu bạn đang sử dụng XCode4, hỗ trợ perforce đã bị loại bỏ và hỗ trợ git hiện được tích hợp sẵn. Nếu bạn làm công việc đa nền tảng như tôi, điều này rất quan trọng. Với Visual Studio, bạn có thể sử dụng phần mở rộng git. Với lực lượng, nó giống nhau trên cả hai hệ điều hành. Vâng, có thể nhiều hơn một chút trên mac bây giờ với XCode4 trên hiện trường.
  11. Tìm kiếm đăng ký bị lỗi (hoặc quy tắc git bisect) - Bạn đã bao giờ cố gắng thực hiện tìm kiếm nhị phân với perforce để tìm ra lỗi được đưa vào ở đâu chưa? Khá rắc rối phải không? Thậm chí còn rắc rối hơn khi có sự tích hợp từ các nhánh khác ở giữa. Tại sao? Bởi vì không có tự động hóa cho các nhiệm vụ như vậy. Bạn cần viết công cụ của riêng mình để nói chuyện với lực lượng và bạn thường không có thời gian. Với git, bạn cung cấp cho nó các điểm bắt đầu (điểm "tốt" và điểm "xấu") và nó sẽ tự động tìm kiếm cho bạn. Tốt hơn nữa, nếu bạn có một tập lệnh có thể tự động hóa quá trình xây dựng và thử nghiệm, bạn có thể kết nối git với tập lệnh và toàn bộ quá trình tìm kiếm thông tin đăng ký được tự động hóa. Đó là cách nó phải được.
  12. Theo dõi các thay đổi trên các bộ tái cấu trúc - Hãy thử tách BigClass thành SmallClass1 và SmallClass2. Đối với Perforce, BigClass hiện đã không còn tồn tại và hai lớp mới (SmallClass1 và SmallClass2 đã tham gia vào cây nguồn). Đối với Perforce, không có mối quan hệ nào giữa BigClass và SmallClass1 và SmallClass2. Mặt khác, Git đủ thông minh để biết rằng x% BigClass hiện nằm trong SmallClass1 và y% BigClass nằm trong SmallClass2 và BigClass đã không còn tồn tại. Bây giờ, từ quan điểm của một người đang xem xét các thay đổi trên nhiều chi nhánh, bạn cho tôi biết cách tiếp cận nào bạn thấy hữu ích hơn - của Git hoặc Perforce. Cá nhân tôi thích cách tiếp cận của Git hơn vì nó phản ánh chính xác hơn sự thay đổi thực tế trong mã. Git có thể làm điều này vì nó theo dõi nội dung bên trong tệp chứ không phải bản thân tệp.
  13. Tập trung hoặc phi tập trung: Git là một hệ thống DVCS trong khi lực lượng tập trung. Một VCS tập trung không thể được phân cấp sau này, nhưng một DVCS (đặc biệt là git) có thể được tập trung. Có một số sản phẩm bổ sung kiểm soát truy cập chi tiết rất tốt cho git, nếu đó là thứ mà doanh nghiệp cần. Cá nhân tôi, tôi sẽ sử dụng một hệ thống mang lại cho tôi sự linh hoạt hơn trong dài hạn.
  14. Ánh xạ nhánh: Nếu bạn muốn thực hiện phân nhánh ngay trong Perforce, bạn cần tạo một ánh xạ nhánh. Có những lý do giải thích cho điều này, nhưng chúng liên quan đến cách Perforce hình thành một nhánh. Là một nhà phát triển hoặc một nhóm, điều này chỉ đơn giản có nghĩa là thêm một bước trong quy trình công việc, điều mà tôi không coi là hiệu quả chút nào.
  15. Chia sẻ công việc giữa các nhóm: Với Perforce, bạn không thể chia nhỏ một bài nộp. Nhóm A đang làm việc trên tính năng A. Nhóm B về tính năng B. Nhóm C làm việc để sửa lỗi. Giờ đây, Nhóm A & B phải sửa một loạt lỗi để triển khai các tính năng của họ. Điều duy nhất là, họ không quá kỷ luật khi thực hiện các thay đổi của mình (có thể vì họ đang gấp rút đến thời hạn) và do đó, "bản sửa lỗi" của họ là một phần của các lần gửi lớn hơn cũng chứa nội dung mới liên quan đến kiểm soát phiên bản trên các chi nhánh có liên quan. Tuy nhiên, Đội C hiện đang phát hành điểm và muốn các đội khác sửa lỗi. Nếu họ đang sử dụng Git, Đội C có thể chọn các thay đổi có liên quan của các đội khác, chia chúng ra và chỉ lấy những gì họ cần mà không cần lo lắng về việc giới thiệu bất kỳ tính năng được triển khai một phần nào. Với Perforce,
  16. Thay đổi nền tảng - Nếu, vì bất kỳ lý do gì trong tương lai, bạn quyết định thay đổi nền tảng mà mình lựa chọn, với Perforce, bạn sẽ có lợi cho Perforce.com và sự sẵn có của các công cụ cho nền tảng bạn chọn.
  17. Thay đổi sang công cụ kiểm soát nguồn tuyệt vời trong tương lai X - Nếu bạn quyết định thay đổi những gì bạn sử dụng để kiểm soát nguồn, trích xuất lịch sử kiểm soát nguồn của bạn từ Perforce và chuyển nó sang hệ thống mới X sẽ là một cơn ác mộng, bởi vì nó là nguồn đóng và tốt nhất bạn có thể làm là đoán - chỉ cần chuyển Google cho Perforce sang Git để hiểu những gì tôi đang nói. Ít nhất là với Git, mã nguồn mở của nó, vì vậy nó loại bỏ rất nhiều phỏng đoán liên quan.

Đó là 2 xu của tôi. Để bảo vệ Perforce, tôi phải nói các quy tắc hỗ trợ khách hàng của họ và công cụ Time Lapse View của họ cũng vậy. Tôi không biết làm thế nào để xem thời gian trôi đi với git. Nhưng để thuận tiện và tiết kiệm thời gian, tôi sẽ sử dụng git bất cứ ngày nào.


2
re # 6 (stash): kệ p4, nó mới.
Trey

Cảm ơn. Tôi đã cập nhật câu trả lời của mình :)
Carl

8
Sự khác biệt lớn nhất giữa Perforce và Git là bộ tư duy bắt buộc. Nếu bạn đang điều hành một cửa hàng VCS tập trung, git sẽ thực sự khó bán vì nó đòi hỏi sự thay đổi trong cách bạn, nhóm của bạn và doanh nghiệp nghĩ về việc kiểm soát phiên bản. Nói cách khác, git là một công cụ tuyệt vời và hiệu quả có khả năng về mặt kỹ thuật cao hơn Perforce. Phần khó là thuyết phục con người :)
Carl

1
Tôi yêu Perforce. Đọc bài này cảm thấy như gian lận ...
KlausCPH

2
@KlausCPH ít nhất bạn sẽ không cần phải chuẩn bị một bài phát biểu chia tay khi bạn rời khỏi Perforce :)
Carl

46

Tôi sẽ mất rất nhiều sức thuyết phục để chuyển từ lực lượng lao động. Trong hai công ty tôi đã sử dụng nó là quá đủ. Đó là cả hai công ty có văn phòng khác nhau, nhưng các văn phòng được thiết lập với nhiều cơ sở hạ tầng nên không cần phải có các tính năng rời rạc / ngắt kết nối.

Có bao nhiêu nhà phát triển bạn đang nói về việc thay đổi?

Câu hỏi thực sự là - điều gì xảy ra đối với lực lượng không đáp ứng được nhu cầu của tổ chức bạn mà git có thể cung cấp? Và tương tự, git có những điểm yếu nào so với perforce? Nếu bạn không thể tự trả lời thì hỏi ở đây sẽ không giúp được gì. Bạn cần tìm một trường hợp kinh doanh cho công ty của bạn. (ví dụ: Có lẽ đó là do chi phí sở hữu tổng thể thấp hơn (bao gồm mất năng suất trong giai đoạn học tập tạm thời, chi phí quản trị cao hơn (ít nhất là ban đầu), v.v.)

Tôi nghĩ rằng bạn đang ở trong một đợt bán hàng khó khăn - lực lượng lao động là một lực lượng khá tốt để cố gắng thay thế. Sẽ không có gì phải bàn cãi nếu bạn đang cố gắng khởi động pvcs hoặc ssafe.


18
Tôi sẽ nói thêm rằng bộ tính năng đáng chú ý của Git phải trả giá bằng một đường cong học tập dốc. (Mặc dù tôi chưa bao giờ thấy chẳng đả tất cả những gì trực quan một trong hai.)
savetheclocktower

1
Câu trả lời tuyệt vời Tim. Justin - tại sao ông chủ của bạn bị bán? Chắc hẳn bạn đã giải đáp thắc mắc của Tim để làm được điều đó? Tôi cũng sẽ quan tâm đến lời biện minh.
Greg Whitfield

4
Bạn phải trả tiền cho Perforce trong một môi trường thương mại, và thực sự tôi luôn thấy rằng Perforce khó sử dụng. Và điểm mạnh duy nhất mà tôi thực sự thấy là nó rất tốt trong việc xử lý các đốm màu nhị phân khổng lồ.
Calyth

2
@Justin: Hãy cẩn thận với lý do "chúng tôi sẽ chỉ sử dụng các tính năng cơ bản". Với git, bạn sẽ sử dụng những thứ cao cấp hơn. Tại sao bạn lại không? Bisect xuất hiện trong tâm trí ngay lập tức. Vì vậy, hãy rebase và cherry-pick.
Carl

3
Trên thực tế, chúng tôi đang có một cuộc trò chuyện liên quan trong các nhận xét kết thúc ngay sau khi lời nhắc "bạn có chắc bạn không muốn chuyển cái này sang trò chuyện không" khiến ai đó cuối cùng nhận thấy rằng câu hỏi này trên thực tế, không phù hợp với SO. Về cơ bản, nó đang hỏi tại sao một hệ thống này "tốt hơn" so với một hệ thống khác và mời gọi rất nhiều cuộc tranh luận sôi nổi cùng với nó.
Adam Parkin

15

Tôi nghĩ về việc giữ mọi người vui vẻ trong quá trình chuyển đổi / đăng bài, một trong những điều cần giải quyết sớm là mức độ riêng tư của một chi nhánh cục bộ trong Git và mức độ tự do cho phép họ mắc sai lầm. Yêu cầu tất cả sao chép bản thân một vài nhánh riêng từ mã hiện tại và sau đó đi hoang dã vào đó, thử nghiệm. Đổi tên một số tệp, kiểm tra nội dung, hợp nhất mọi thứ từ một nhánh khác, tua lại lịch sử, căn cứ lại một tập hợp các thay đổi lên trên tệp khác, v.v. Cho thấy ngay cả những tai nạn tồi tệ nhất của họ tại địa phương cũng không gây hậu quả gì cho đồng nghiệp của họ. Những gì bạn muốn là một tình huống mà các nhà phát triển cảm thấy an toàn để họ có thể học nhanh hơn (vì Git có một đường cong học tập dốc rất quan trọng) và cuối cùng để họ hiệu quả hơn với tư cách là nhà phát triển.

Khi bạn đang cố gắng tìm hiểu một công cụ tập trung, rõ ràng bạn sẽ lo lắng về việc tạo ra một số lỗi gây ra sự cố cho những người dùng khác của kho lưu trữ. Chỉ riêng nỗi sợ hãi về sự bối rối cũng đủ để ngăn cản mọi người thử nghiệm. Ngay cả khi có một kho lưu trữ "đào tạo" đặc biệt cũng không giúp ích được gì, bởi vì chắc chắn các nhà phát triển sẽ gặp phải tình huống trong hệ thống sản xuất mà họ chưa từng thấy trong quá trình đào tạo, và vì vậy họ trở lại lo lắng.

Nhưng bản chất phân tán của Git không làm được điều này. Bạn có thể thử bất kỳ thử nghiệm nào ở một chi nhánh địa phương, và nếu nó sai khủng khiếp, chỉ cần vứt bỏ chi nhánh đó và không ai cần biết. Vì bạn có thể tạo một nhánh cục bộ của bất kỳ thứ gì, nên bạn có thể sao chép vấn đề mà bạn đang gặp phải với kho lưu trữ trực tiếp thực, nhưng không có nguy cơ "phá vỡ bản dựng" hoặc tự làm cho mình một trò hề. Bạn hoàn toàn có thể kiểm tra mọi thứ ngay sau khi hoàn thành, không cần cố gắng dồn công việc hàng loạt vào các gói nhỏ gọn gàng. Vì vậy, không chỉ hai thay đổi mã lớn mà bạn đã dành bốn giờ cho ngày hôm nay, mà còn là bản sửa lỗi xây dựng mà bạn đã nhớ được nửa chặng đường và lỗi chính tả trong tài liệu bạn đã phát hiện khi giải thích điều gì đó với đồng nghiệp, v.v. Và nếu những thay đổi lớn bị bỏ qua vì dự án đang thay đổi hướng,


Không có lý do gì bạn không thể có một chi nhánh riêng của một hệ thống tập trung. Các DVCS đôi khi làm tốt hơn trong việc hợp nhất, nhưng chỉ vì nhánh riêng không tồn tại trên repo từ xa không có nghĩa là bạn không thể tạo một nhánh chỉ cho bạn tồn tại trên repo từ xa.
Billy ONeal

2
Nhận xét này về mặt kỹ thuật là đúng, nhưng đó là loại thiếu điểm. Hệ thống kiểm soát sửa đổi là một công cụ xã hội. Về mặt xã hội, chi nhánh có tên của bạn trên đó trong máy chủ được chia sẻ không phải là "riêng tư" mà nó được chia sẻ. Có, ngay cả với ACL và bất cứ thứ gì tại chỗ. Cũng có những khác biệt về kỹ thuật (rõ ràng là chi nhánh riêng git của tôi được sử dụng khi tôi đang về nhà, không có / không có Internet) nhưng chúng là công ty con đối với sự khác biệt xã hội.
tialaramex,

2
Một chi nhánh tư nhân có lực lượng, thật tệ. Sự dễ dàng mà bạn tạo và chuyển đổi giữa các nhánh trong git, không thể so sánh với perforce. Dù sao thì private cũng thực sự là một nhánh "private" của lực lượng. Bạn không giữ nó cục bộ. Bạn hoàn toàn phụ thuộc vào việc truy cập mạng.
Erik Engheim

9

Lệnh đã bán tôi trên git cá nhân là bisect . Tôi không nghĩ rằng tính năng này có sẵn trong bất kỳ hệ thống điều khiển phiên bản nào khác tính đến thời điểm hiện tại.

Điều đó đang được nói, nếu mọi người đã quen với một ứng dụng khách GUI để kiểm soát nguồn, họ sẽ không ấn tượng với git. Ngay bây giờ, ứng dụng khách đầy đủ tính năng duy nhất là dòng lệnh.


1
Để công bằng (tôi đã chọn git hơn Hg), cần lưu ý rằng Mercurial cũng có khả năng phân đôi - mặc dù nó được vận chuyển như một plugin mà bạn phải tải rõ ràng.
Aristotle Pagaltzis 21/10/08

2
darcs đã có "trackdown" từ trước khi git tồn tại. Phải thừa nhận là các phiên bản đầu tiên khá thô.
wnoise 23/10/08

2
về giao diện người dùng - GitX trên OSX rất tuyệt vời.
Antony Stubbs

4
SourceTree cũng là một ứng dụng osx gốc tốt khác. Nó đã trở thành miễn phí sau khi nó được mua lại. Tôi đã sử dụng nó một thời gian và tôi thích nó. Tôi chủ yếu là commandliner trước khi sử dụng SourceTree.
Prakash Nadar

1
Theo kinh nghiệm của tôi với Git, bạn thực sự cần cả dòng lệnh và một ứng dụng khách đồ họa để sử dụng nó một cách hiệu quả. Bạn cần dòng lệnh vì có rất nhiều sức mạnh không dễ dàng để đưa vào GUI và bạn cần GUI (hoặc ít nhất git log --graph) vì lịch sử sửa đổi Git có xu hướng phi tuyến tính và khó hình dung nếu không có hình ảnh. Tôi sử dụng GitX và SourceTree làm GUI, mặc dù gitk (đi kèm với Git hiện nay) có thể sử dụng được trong thời gian ngắn.
Marnen Laibow-Koser

9

Mọi người đang sử dụng các tính năng Perforce nào?

  • Nhiều không gian làm việc trên một máy
  • Danh sách thay đổi được đánh số
  • Các chi nhánh của nhà phát triển
  • Tích hợp với IDE (Visual Studio, Eclipse, SlickEdit, ...)
  • Nhiều biến thể xây dựng
  • Không gian làm việc tổng hợp
  • Tích hợp một số bản sửa lỗi nhưng không tích hợp các bản sửa lỗi khác
  • Vân vân

Tôi hỏi bởi vì nếu tất cả những người đang làm là lấy và đặt từ dòng lệnh, git đã bao phủ điều đó, và tất cả các RTS khác cũng vậy.


2
Không chắc chắn về "nhiều không gian làm việc trên một máy" có nghĩa là gì - các VCS khác chỉ đơn giản là không có khái niệm về không gian làm việc vì vậy nó thực sự không thể được coi là một tính năng cho Perforce. Những người khác có ý nghĩa mặc dù.
Billy ONeal

Ví dụ về nhiều không gian làm việc: máy khách A có phiên bản dành cho nhà phát triển và phát hành của tệp A-only cùng với một tập hợp con các công cụ nội bộ ở phiên bản 1.52; client B có các tệp chỉ dành cho nhà phát triển và phát hành B cộng với một tập hợp con khác nhưng chồng chéo của các công cụ nội bộ, cả dev và phiên bản 1.52. Nhà phát triển đang làm việc đồng thời trên cả hai và có thể chọn hiển thị các công cụ nội bộ đã thay đổi cho A để xem những điểm nào bị gián đoạn.
Thomas L Holaday

6
@Tomas: Tại sao bạn không ... Đơn giản chỉ cần kiểm tra nó hai lần? Perforce cần phải có nó như một "tính năng" vì nếu không nó sẽ trở nên kỳ lạ do phải đảm bảo rằng các biến môi trường được đặt đúng cách, các mục đăng ký chính xác, v.v.
Arafangion

@Arafangion, không rõ bằng cách nào việc kiểm tra hai lần tạo điều kiện cho các tệp tiếp xúc có chọn lọc để xây dựng bộ.
Thomas L Holaday

6

Rõ ràng GitHub hiện cung cấp các khóa đào tạo git cho các công ty . Quoth bài đăng trên blog của họ về nó :

Tôi đã đến khuôn viên Google nhiều lần trong vài tuần qua để giúp đào tạo các Android ở đó trong Git. Tôi đã được Shawn Pearce đề nghị (bạn có thể biết anh ấy từ vinh quang Git và EGit / JGit - anh ấy là anh hùng đảm nhận công việc bảo trì khi Junio ​​ra khỏi thành phố) để giúp anh ấy đào tạo các kỹ sư của Google làm việc trên Andriod trong việc chuyển đổi từ Perforce sang Git , để Android có thể được chia sẻ với mọi người. Tôi có thể nói với bạn rằng tôi rất vui khi làm điều đó.

[…]

Logical Awesome hiện chính thức cung cấp loại hình dịch vụ đào tạo tùy chỉnh này cho tất cả các công ty, nơi chúng tôi có thể giúp tổ chức của bạn đào tạo và lập kế hoạch nếu bạn cũng đang nghĩ đến việc chuyển sang Git.

Nhấn mạnh của tôi.


4

Tôi đã sử dụng Perforce trong một thời gian dài và gần đây tôi cũng bắt đầu sử dụng GIT. Đây là ý kiến ​​"khách quan" của tôi:

Các tính năng của Perforce:

  1. Các công cụ GUI dường như có nhiều tính năng hơn (ví dụ: Chế độ xem thời gian trôi đi, Đồ thị sửa đổi)
  2. Tốc độ khi đồng bộ hóa với bản sửa đổi đầu (không có chi phí chuyển toàn bộ lịch sử)
  3. Tích hợp Eclipse / Visual Studio thực sự tốt
  4. Bạn có thể phát triển nhiều tính năng trong một nhánh cho mỗi Changelist (Tôi vẫn không chắc chắn 100% liệu đây có phải là một lợi thế so với GIT)
  5. Bạn có thể "theo dõi" những nhà phát triển khác đang làm gì - loại tệp họ đã kiểm tra.

Các tính năng của GIT:

  1. Tôi có ấn tượng rằng dòng lệnh GIT đơn giản hơn nhiều so với Perforce (init / clone, add, commit. Không có cấu hình của Workspaces phức tạp)
  2. Tốc độ khi truy cập lịch sử dự án sau khi thanh toán (đi kèm với chi phí sao chép toàn bộ lịch sử khi đồng bộ hóa)
  3. Chế độ ngoại tuyến (các nhà phát triển sẽ không phàn nàn rằng máy chủ P4 không kết nối được sẽ cấm họ viết mã)
  4. Tạo một nhánh mới nhanh hơn nhiều
  5. Máy chủ GIT "chính" không cần nhiều TByte dung lượng lưu trữ, vì mỗi nhà phát triển có thể có hộp cát cục bộ của riêng nó
  6. GIT là OpenSource - không có phí cấp phép
  7. Nếu Công ty của bạn cũng đang đóng góp cho các dự án OpenSource thì việc chia sẻ các bản vá dễ dàng hơn nhiều với GIT

Nhìn chung, đối với các dự án OpenSource / Distributed, tôi luôn đề xuất GIT, vì nó giống một ứng dụng P2P hơn và mọi người đều có thể tham gia phát triển. Ví dụ: tôi nhớ rằng khi tôi thực hiện phát triển từ xa với Perforce, tôi đã đồng bộ hóa các Dự án 4GB trên liên kết 1Mbps một lần trong một tuần. Rất nhiều thời gian chỉ đơn giản là bị lãng phí vì điều đó. Ngoài ra, chúng tôi cần thiết lập VPN để làm điều đó.

Nếu bạn có một công ty nhỏ và máy chủ P4 sẽ luôn hoạt động thì tôi sẽ nói rằng Perforce cũng là một lựa chọn rất tốt.


Tính năng Git # 1 tốt nhất là một tuyên bố đáng ngờ. Có lẽ Git thắng khi thiết lập, nhưng việc sử dụng hàng ngày khá vụng về (thường yêu cầu nhiều lệnh để hoàn thành một nhiệm vụ đơn giản)
Adam Parkin

1
@AdamParkin Tác vụ nào bạn thấy vụng về từ dòng lệnh? (Tôi sử dụng GUI nếu có thể, nhưng tôi nghĩ cấu trúc lệnh của Git khá ổn.)
Marnen Laibow-Koser

1
@AdamParkin Chà, việc dễ sử dụng dòng lệnh là khía cạnh thẩm mỹ, do đó ít nhất nó cũng mang tính chủ quan. Lý do tại sao cá nhân tôi coi Dòng lệnh của Git đơn giản hơn Perforce, là trong Perforce, bạn phải thiết lập không gian làm việc và các biến môi trường (P4USER, v.v.) trước khi bạn có thể bắt đầu làm việc với các tệp kho lưu trữ, so với một "git clone" chỉ huy. Tất nhiên có một số Lệnh git nâng cao không có trong Perforce (ví dụ: viết lại lịch sử địa phương) và chúng có vẻ giống như "khoa học tên lửa" cho người dùng Perforce thông thường.
user389238

Tôi chưa sử dụng nó nhưng đối với tôi, có vẻ như quản lý các bộ thay đổi chỉ là một nhánh của người nghèo khi xem xét trong git, bạn có thể bóp chết các nhánh tính năng của mình hoặc căn cứ lại chúng thành chính.
Ryan The Leach

4

Chúng tôi đã sử dụng Git đôi khi, gần đây ổ cứng của máy chủ Git của chúng tôi bị lỗi và chúng tôi không thể hoàn nguyên về trạng thái mới nhất. Chúng tôi đã cố gắng trở lại trạng thái cũ vài ngày. Khi máy chủ đã được sao lưu. Mọi người trong đội đã kéo / đẩy các thay đổi của họ và thì máy chủ đã trở lại trạng thái hiện tại.


3
Trong một bài nói chuyện Linus đã nói với @ Google về Git, anh ấy nói về cách anh ấy không sao lưu vì bản sao của nhân Linux của mọi người là một bản sao lưu đầy đủ của nó. Thực sự tốt điểm thực sự.
Adam Parkin

Điều đó đúng theo mọi nghĩa, mỗi lần đóng là một "bản sao lưu" nhưng git trong nhiều trường hợp vẫn được sử dụng như một công cụ "phân phối tập trung". tức là giống như SVN với các lợi ích phân nhánh bổ sung. Tổ chức luôn muốn sao lưu tất cả những gì họ có.
Prakash Nadar

3

Một sự khác biệt quan trọng giữa Perforce và git (và cái thường được đề cập nhất) là khả năng xử lý các tệp nhị phân khổng lồ tương ứng của chúng.

Ví dụ: trong blog này của một nhân viên tại công ty phát triển trò chơi điện tử: http://corearchitecture.blogspot.com/2011/09/git-vs-perforce-from-game-development.html

Tuy nhiên, điều quan trọng là, sự khác biệt về tốc độ giữa git và perforce, khi bạn có một kho lưu trữ 6gb khổng lồ, chứa mọi thứ từ tài liệu đến mọi tệp nhị phân từng được tạo (và cuối cùng, ồ vâng! Lịch sử nguồn thực tế), thường đến từ thực tế là các công ty lớn có xu hướng chạy Perforce, và vì vậy họ thiết lập nó để giảm tải tất cả các hoạt động quan trọng cho ngân hàng máy chủ khổng lồ ở tầng hầm.

Lợi thế quan trọng này về phía Perforce chỉ đến từ một yếu tố không liên quan gì đến Perforce, thực tế là công ty điều hành nó có đủ khả năng chi trả ngân hàng máy chủ nói trên.

Và, cuối cùng, Perforce và git là các sản phẩm khác nhau. Git được thiết kế để chỉ là một VCS và nó làm điều này tốt hơn nhiều so với Perforce (ở chỗ nó có nhiều tính năng hơn, nói chung là dễ sử dụng hơn, đặc biệt, nói cách khác, phân nhánh trong Perforce giống như thực hiện trái tim mở phẫu thuật, nó chỉ nên được thực hiện bởi các chuyên gia: P) ( http://stevehanov.ca/blog/index.php?id=50 )

Bất kỳ lợi ích nào khác mà các công ty sử dụng Perforce thu được chỉ đến bởi vì Perforce không chỉ là một VCS, nó còn là một máy chủ tệp, cũng như có một loạt các tính năng khác để kiểm tra hiệu suất của các bản dựng, v.v.

Cuối cùng: Git là mã nguồn mở và khả năng khởi động linh hoạt hơn rất nhiều, sẽ không quá khó để vá lỗi git để giảm tải các hoạt động quan trọng cho một máy chủ trung tâm, chạy rất nhiều phần cứng đắt tiền.


3

Tôi nghĩ một điều mà tôi biết GIT thắng là khả năng "bảo toàn phần cuối dòng" trên tất cả các tệp, trong khi lực lượng dường như khăng khăng dịch chúng sang định dạng Unix, Dos / Windows hoặc MacOS9 ("\ n", "\ r \ n "hoặc" \ r).

Đây thực sự là một điều khó khăn nếu bạn đang viết tập lệnh Unix trong môi trường Windows hoặc môi trường hệ điều hành hỗn hợp. Thậm chí không thể đặt quy tắc trên cơ sở mỗi tệp-phần mở rộng. Ví dụ: nó sẽ chuyển đổi các tệp .sh, .bash, .unix sang định dạng Unix và chuyển đổi các tệp .ccp, .bat hoặc .com sang định dạng Dos / Windows.

Trong GIT (tôi không chắc đó là mặc định, một tùy chọn hay tùy chọn duy nhất), bạn có thể thiết lập nó thành "giữ nguyên phần cuối dòng". Điều đó có nghĩa là, bạn có thể thay đổi thủ công phần cuối dòng của tệp và sau đó GIT sẽ giữ nguyên định dạng đó. Đối với tôi, đây dường như là cách lý tưởng để làm mọi việc và tôi không hiểu tại sao đây không phải là một lựa chọn với Perforce.

Cách duy nhất bạn có thể đạt được hành vi này là đánh dấu các tệp là tệp nhị phân. Theo tôi thấy, đó sẽ là một sự tấn công tồi tệ để giải quyết một tính năng bị thiếu. Ngoài việc tẻ nhạt khi phải làm trên tất cả các tập lệnh, v.v., nó cũng có thể phá vỡ hầu hết các khác biệt, v.v.

"Giải pháp" mà chúng tôi đã giải quyết vào lúc này, là chạy một lệnh sed để loại bỏ tất cả các ký tự xuống dòng khỏi các tập lệnh mỗi khi chúng được triển khai tới môi trường Unix của chúng. Điều này cũng không lý tưởng, đặc biệt là vì một số trong số chúng được triển khai bên trong tệp WAR và dòng sed phải được chạy lại khi chúng được giải nén.

Đây chỉ là điều tôi nghĩ mang lại cho GIT một lợi thế lớn, và điều mà tôi không nghĩ đã được đề cập ở trên.

CHỈNH SỬA: Sau khi sử dụng Perforce lâu hơn một chút, tôi muốn thêm một vài nhận xét khác:

A) Một điều tôi thực sự nhớ trong Perforce là sự khác biệt rõ ràng và cá thể, bao gồm các tệp đã thay đổi, xóa và thêm. Điều này có sẵn trong GIT bằng git difflệnh, nhưng trong Perforce, các tệp phải được kiểm tra trước khi các thay đổi của chúng được ghi lại và mặc dù bạn có thể thiết lập trình chỉnh sửa chính của mình (như Eclipse) để tự động kiểm tra tệp khi bạn chỉnh sửa chúng, bạn đôi khi có thể chỉnh sửa tệp theo những cách khác (notepad, lệnh unix, v.v.). Và các tệp mới dường như không được thêm tự động, ngay cả khi sử dụng Eclipse và p4eclipse, điều này có thể khá khó chịu. Vì vậy, để tìm tất cả các thay đổi, bạn phải chạy "Khác biệt so với ..." trên toàn bộ không gian làm việc, trước hết sẽ mất một lúc để chạy và thứ hai là bao gồm tất cả những thứ không liên quan trừ khi bạn thiết lập danh sách loại trừ rất phức tạp, dẫn tôi đến điểm tiếp theo.

B) Trong GIT, tôi thấy .gitignore rất đơn giản và dễ quản lý, đọc và hiểu. Tuy nhiên, danh sách bỏ qua / loại trừ không gian làm việc có thể định cấu hình trong Perforce có vẻ khó sử dụng và phức tạp không cần thiết. Tôi không thể nhận được bất kỳ loại trừ nào với các ký tự đại diện hoạt động. Tôi muốn làm một cái gì đó như

-//Server/mainline/.../target/...   //Svend_Hansen_Server/.../target/...

Để loại trừ tất cả các thư mục đích trong tất cả các dự án bên trong Server / mainline. Tuy nhiên, điều này dường như không hoạt động như tôi mong đợi và cuối cùng tôi đã thêm một dòng cho mọi dự án như:

-//Server/mainline/projectA/target/...  //Svend_Hansen_Server/projectA/target/...
-//Server/mainline/projectB/target/...  //Svend_Hansen_Server/projectB/target/...
...

Và các dòng tương tự cho thư mục bin, tệp .classpath và .projet và hơn thế nữa.

C) Trong Perforce có những danh sách thay đổi khá hữu ích. Tuy nhiên, giả sử tôi thực hiện một nhóm thay đổi, kiểm tra tất cả và đưa chúng vào danh sách thay đổi, sau đó làm việc khác trước khi gửi danh sách thay đổi đó. Nếu sau đó tôi thực hiện thay đổi đối với một trong các tệp được bao gồm trong danh sách thay đổi đầu tiên, tệp đó sẽ vẫn nằm trong danh sách thay đổi đó và sau đó tôi không thể gửi danh sách thay đổi giả sử rằng nó chỉ chứa các thay đổi mà tôi đã thêm ban đầu (mặc dù sẽ là các tệp giống nhau). Trong GIT, nếu bạn thêm tệp và họ thực hiện thêm các thay đổi đối với tệp đó, thì những thay đổi đó sẽ không được thêm (và sẽ vẫn hiển thị tronggit diffvà bạn sẽ không thể cam kết tệp nếu không thêm các thay đổi mới trước. Tất nhiên, điều này không hữu ích giống như cách danh sách thay đổi có thể giống như bạn chỉ có một tập hợp các tệp được thêm vào, nhưng trong GIT, bạn chỉ có thể cam kết các thay đổi, vì điều đó không thực sự thúc đẩy chúng. Bạn có thể họ làm việc với các thay đổi khác trước khi đẩy chúng, nhưng bạn sẽ không thể đẩy bất kỳ thứ gì khác mà bạn thêm sau đó, mà không đẩy các thay đổi trước đó.


2

Tôi không có kinh nghiệm với Git, nhưng tôi có Mercurial, cũng là một VCS phân phối. Nó thực sự phụ thuộc vào dự án, nhưng trong trường hợp của chúng tôi, một VCS phân tán phù hợp với dự án vì về cơ bản loại bỏ các bản dựng bị hỏng thường xuyên.

Tôi nghĩ rằng nó thực sự phụ thuộc vào dự án, vì một số phù hợp hơn với VCS máy khách-máy chủ, và những người khác sử dụng một VCS phân tán.


(Được cho, đây là một câu trả lời cũ, nhưng ...) Bạn có thể chạy Git (và tôi cho rằng cả Mercurial) như thể nó là một VCS máy khách-máy chủ. Nó vẫn hoạt động tốt hơn so với VCS máy khách-máy chủ, do dễ dàng phân nhánh và hợp nhất và khả năng cam kết riêng. Tôi không còn thấy sử dụng nhiều cho VCS máy khách-máy chủ nữa, ít nhất là cho đến khi chúng có được kỹ năng hợp nhất của mình lên ngang bằng.
Marnen Laibow-Koser

-5

Đây là những gì tôi không thích về git:

Trước hết, tôi nghĩ rằng ý tưởng phân tán bay khi đối mặt với thực tế. Tất cả những người thực sự sử dụng git đều làm như vậy một cách tập trung, ngay cả Linus Torvalds. Nếu hạt nhân được quản lý theo cách phân tán, điều đó có nghĩa là tôi thực sự không thể tải xuống các nguồn hạt nhân "chính thức" - sẽ không có nguồn nào - tôi phải quyết định xem mình muốn phiên bản của Linus hay phiên bản của Joe, hoặc phiên bản của Bill. Điều đó rõ ràng sẽ là vô lý, và đó là lý do tại sao có một định nghĩa chính thức mà Linus kiểm soát bằng cách sử dụng quy trình làm việc tập trung.

Nếu bạn chấp nhận rằng bạn muốn có một định nghĩa tập trung cho nội dung của mình, thì rõ ràng là vai trò máy chủ và máy khách hoàn toàn khác nhau, vì vậy tín điều rằng phần mềm máy khách và máy chủ phải giống nhau trở nên hoàn toàn hạn chế. Giáo điều cho rằng dữ liệu máy khách và máy chủ phải giống nhau trở nên vô lý một cách nghiêm trọng, đặc biệt là trong một cơ sở mã đã có lịch sử mười lăm năm mà không ai quan tâm nhưng mọi người sẽ phải sao chép.

Những gì chúng tôi thực sự muốn làm với tất cả những thứ cũ đó là cất nó vào tủ và quên rằng nó ở đó, giống như bất kỳ VCS bình thường nào. Thực tế là hàng ngày phải gửi nó qua lại trên mạng là rất nguy hiểm, vì nó khiến bạn phải cắt tỉa nó. Việc cắt tỉa đó bao gồm rất nhiều quyết định tẻ nhạt và nó có thể dẫn đến sai lầm. Vì vậy, mọi người có thể sẽ lưu giữ toàn bộ loạt ảnh chụp nhanh từ nhiều thời điểm khác nhau trong lịch sử, nhưng đó không phải là điều khiển nguồn ngay từ đầu sao? Vấn đề này không tồn tại cho đến khi ai đó phát minh ra mô hình phân tán.

Git tích cực khuyến khích mọi người viết lại lịch sử, và điều trên có lẽ là một lý do cho điều đó. Mọi VCS bình thường đều khiến việc viết lại lịch sử là điều không thể đối với tất cả trừ các quản trị viên và đảm bảo rằng các quản trị viên không có lý do gì để cân nhắc điều đó. Hãy sửa cho tôi nếu tôi sai, nhưng theo như tôi biết, git không cung cấp cách nào để cấp cho người dùng bình thường quyền ghi nhưng cấm họ viết lại lịch sử. Điều đó có nghĩa là bất kỳ nhà phát triển nào có ác cảm (hoặc vẫn đang vật lộn với đường cong học tập) đều có thể làm hỏng toàn bộ cơ sở mã. Làm thế nào để chúng ta thắt chặt cái đó? Vâng, bạn thực hiện sao lưu thường xuyên toàn bộ lịch sử, tức là bạn giữ lịch sử bình phương, hoặc bạn cấm ghi quyền truy cập vào tất cả ngoại trừ một số người nghèo sẽ nhận tất cả các khác biệt qua email và hợp nhất chúng bằng tay.

Hãy lấy một ví dụ về một dự án lớn, được tài trợ tốt và xem git đang hoạt động như thế nào đối với chúng: Android. Tôi đã từng quyết định chơi với chính hệ thống android. Tôi phát hiện ra rằng tôi phải sử dụng một loạt các tập lệnh được gọi là repo để lấy git của họ. Một số repo chạy trên máy khách và một số trên máy chủ, nhưng cả hai, bằng chính sự tồn tại của chúng, đang minh họa một thực tế là git không hoàn thiện về cả hai dung lượng. Điều đã xảy ra là tôi đã không thể lấy các nguồn trong khoảng một tuần và sau đó đã bỏ cuộc hoàn toàn. Tôi đã phải lấy một lượng lớn dữ liệu thực sự từ nhiều kho lưu trữ khác nhau, nhưng máy chủ hoàn toàn quá tải với những người như tôi. Repo đã hết thời gian chờ và không thể tiếp tục từ nơi đã hết thời gian. Nếu git có thể phân phối được như vậy, bạn sẽ nghĩ rằng chúng ' d đã thực hiện một số loại ngang hàng để giảm tải trên một máy chủ đó. Git có thể phân phối, nhưng nó không phải là một máy chủ. Git + repo là một máy chủ, nhưng repo không thể phân phối được vì nó chỉ là một bộ sưu tập hack đặc biệt.

Một minh họa tương tự về sự bất cập của git là gitolite (và tổ tiên của nó dường như không hoạt động tốt như vậy.) Gitolite mô tả công việc của nó là giảm bớt việc triển khai máy chủ git. Một lần nữa, chính sự tồn tại của thứ này chứng minh rằng git không phải là một máy chủ, bất kỳ hơn nó là một máy khách. Hơn nữa, nó sẽ không bao giờ như vậy, bởi vì nếu nó phát triển thành một trong hai nó sẽ phản bội những nguyên tắc sáng lập của nó.

Ngay cả khi bạn đã tin vào thứ được phân phối, git vẫn sẽ là một mớ hỗn độn. Ví dụ, một chi nhánh là gì? Họ nói rằng bạn hoàn toàn tạo ra một nhánh mỗi khi bạn sao chép một kho lưu trữ, nhưng điều đó không thể giống với một nhánh trong một kho lưu trữ duy nhất. Vì vậy, đó là ít nhất hai thứ khác nhau được gọi là chi nhánh. Nhưng sau đó, bạn cũng có thể tua lại trong repo và bắt đầu chỉnh sửa. Nó giống như loại nhánh thứ hai, hay một cái gì đó khác? Có thể nó phụ thuộc vào loại repo bạn có - ồ vâng - rõ ràng repo cũng không phải là một khái niệm rõ ràng. Có những cái bình thường và những cái trần. Bạn không thể đẩy lên bình thường vì phần trống có thể không đồng bộ với cây nguồn của nó. Nhưng bạn không thể bắt chước một cách trần trụi vì họ không nghĩ đến điều đó. Vì vậy, bạn phải chuyển sang trạng thái bình thường, sao chép bản sao đó thành một bản trống mà các nhà phát triển đã tấn công và cvsexport cái đó sang một bản sao cvs làm việc vẫn phải được kiểm tra vào cvs. Ai có thể bị làm phiền? Tất cả những biến chứng này đến từ đâu? Từ chính ý tưởng phân tán. Cuối cùng tôi đã từ bỏ gitolite vì nó thậm chí còn áp đặt nhiều hạn chế hơn đối với tôi.

Git nói rằng việc phân nhánh nên nhẹ nhàng, nhưng nhiều công ty đã gặp phải vấn đề chi nhánh bất hảo nghiêm trọng nên tôi đã nghĩ rằng việc phân nhánh phải là một quyết định quan trọng với sự kiểm soát chặt chẽ. Đây là nơi lực lượng thực sự tỏa sáng ...

Trong lực lượng, bạn hiếm khi cần các chi nhánh vì bạn có thể tung hứng các bộ thay đổi một cách rất nhanh nhẹn. Ví dụ: quy trình làm việc thông thường là bạn đồng bộ hóa với phiên bản tốt được biết đến gần đây nhất trên mainline, sau đó viết tính năng của bạn. Bất cứ khi nào bạn cố gắng sửa đổi một tệp, sự khác biệt của tệp đó sẽ được thêm vào "bộ thay đổi mặc định" của bạn. Khi bạn cố gắng kiểm tra tập thay đổi, nó sẽ tự động cố gắng hợp nhất tin tức từ dòng chính vào tập thay đổi của bạn (khôi phục nó một cách hiệu quả) và sau đó cam kết. Quy trình làm việc này được thực thi mà bạn thậm chí không cần hiểu nó. Do đó, Mainline thu thập lịch sử các thay đổi mà bạn có thể dễ dàng chọn anh đào theo cách của mình sau này. Ví dụ: giả sử bạn muốn hoàn nguyên một cái cũ, chẳng hạn như cái trước cái trước cái cuối cùng. Bạn đồng bộ hóa với thời điểm trước khi thay đổi vi phạm, đánh dấu các tệp bị ảnh hưởng như một phần của tập thay đổi, đồng bộ hóa đến khoảnh khắc sau đó và hợp nhất với "luôn là của tôi". (Có một điều rất thú vị ở đó: đồng bộ hóa không có nghĩa là có cùng một thứ - nếu một tệp có thể chỉnh sửa được (tức là trong một bộ thay đổi đang hoạt động) thì nó sẽ không bị đồng bộ hóa mà được đánh dấu là do để giải quyết.) Bây giờ bạn có danh sách thay đổi hoàn tác danh sách vi phạm. Hợp nhất trong các tin tức tiếp theo và bạn có một danh sách thay đổi mà bạn có thể đặt trên đầu dòng chính để có hiệu quả mong muốn. Không có lúc nào chúng tôi viết lại bất kỳ lịch sử nào. Hợp nhất trong các tin tức tiếp theo và bạn có một danh sách thay đổi mà bạn có thể đặt trên đầu dòng chính để có hiệu quả mong muốn. Không có lúc nào chúng tôi viết lại bất kỳ lịch sử nào. Hợp nhất trong các tin tức tiếp theo và bạn có một danh sách thay đổi mà bạn có thể đặt trên đầu dòng chính để có hiệu quả mong muốn. Không có lúc nào chúng tôi viết lại bất kỳ lịch sử nào.

Bây giờ, giả sử qua một nửa quá trình này, ai đó chạy đến gặp bạn và yêu cầu bạn bỏ mọi thứ và sửa một số lỗi. Bạn chỉ cần đặt tên cho danh sách thay đổi mặc định của mình (thực tế là một con số), sau đó "tạm ngưng" nó, sửa lỗi trong danh sách thay đổi mặc định hiện đang trống, cam kết và tiếp tục danh sách thay đổi đã đặt tên. Thông thường, có một số danh sách thay đổi bị tạm ngưng tại một thời điểm mà bạn thử những thứ khác nhau. Thật dễ dàng và riêng tư. Bạn có được những gì bạn thực sự muốn từ một chế độ nhánh mà không bị cám dỗ để trì hoãn hoặc không hợp nhất với dòng chính.

Tôi cho rằng về mặt lý thuyết có thể làm điều gì đó tương tự trong git, nhưng trên thực tế git làm cho mọi thứ có thể thực hiện được hơn là khẳng định một quy trình làm việc mà chúng tôi chấp thuận. Mô hình tập trung là một loạt các đơn giản hóa hợp lệ so với mô hình phân tán là một sự tổng quát hóa không hợp lệ. Nó được phát triển quá mức đến mức về cơ bản nó mong đợi bạn thực hiện kiểm soát nguồn trên nó, giống như repo.

Điều khác là nhân rộng. Trong git, bất cứ điều gì đều có thể xảy ra vì vậy bạn phải tự tìm ra nó. Trong thực tế, bạn sẽ có được một bộ nhớ cache không trạng thái hiệu quả. Cấu hình duy nhất mà nó cần biết là vị trí của cái chính và các máy khách có thể chỉ vào cái chính hoặc bộ đệm theo quyết định của họ. Đó là một công việc năm phút và nó không thể sai.

Bạn cũng có các trình kích hoạt và các biểu mẫu có thể tùy chỉnh để xác nhận đánh giá mã, tham chiếu bugzilla, v.v. và tất nhiên, bạn có các nhánh để sử dụng khi bạn thực sự cần chúng. Nó không phải là clearcase, nhưng nó gần gũi và rất dễ thiết lập và bảo trì.

Nói chung, tôi nghĩ rằng nếu bạn biết bạn sẽ làm việc theo cách tập trung, điều mà mọi người đều làm, bạn cũng có thể sử dụng một công cụ được thiết kế với mục đích đó. Git được đánh giá quá cao vì sự thông minh đáng sợ của Linus cùng với xu hướng chạy theo nhau như bầy cừu của các dân tộc, nhưng sự raison d'etre chính của nó không thực sự phù hợp với lẽ thường, và bằng cách làm theo nó, git tự trói tay mình với hai giáo điều lớn rằng (a) phần mềm và (b) dữ liệu phải giống nhau ở cả máy khách và máy chủ, và điều đó sẽ luôn làm cho nó trở nên phức tạp và khập khiễng trong công việc tập trung.


4
Ôi, cái quái gì vậy. Tôi có một vài phút, vì vậy tôi sẽ cố gắng nhận xét về một số lỗi lớn hơn. "Nếu hạt nhân được quản lý theo cách phân tán, điều đó có nghĩa là tôi thực sự không thể tải xuống các nguồn hạt nhân" chính thức "- sẽ không có nguồn nào - tôi sẽ phải quyết định xem mình muốn phiên bản của Linus hay phiên bản của Joe. hoặc phiên bản của Bill. "- Tôi không thể nói cụ thể về dự án nhân Linux, vì tôi chưa bao giờ làm việc về nó, nhưng nói chung, đây thực tế là cách phần mềm nguồn mở hoạt động. Bạn có thể tải xuống bất kỳ ngã ba nào bạn thích.
Marnen Laibow-Koser

2
"Những gì chúng tôi thực sự muốn làm với tất cả những thứ cũ kỹ đó là cất nó vào tủ và quên rằng nó ở đó, giống như bất kỳ VCS bình thường nào. Thực tế là việc chuyển tải tất cả qua mạng mỗi ngày là rất nguy hiểm, bởi vì nó nài nỉ bạn cắt tỉa nó. " • Bạn đã bao giờ thực sự sử dụng Git chưa? Git không cằn nhằn bạn cắt bớt repo của bạn. Bên cạnh đó, khả năng nén dữ liệu của Git cực kỳ hiệu quả; không có gì lạ khi một repo Git — với lịch sử nhánh phức tạp — nhỏ hơn đáng kể so với một bản sao làm việc SVN (không có lịch sử) của cùng một cơ sở mã.
Marnen Laibow-Koser

4
"Mọi VCS bình thường đều khiến cho tất cả trừ quản trị viên không thể viết lại lịch sử và đảm bảo rằng quản trị viên không có lý do gì để cân nhắc. Hãy sửa cho tôi nếu tôi sai, nhưng theo tôi biết, git không cung cấp cách nào để cho phép người dùng bình thường viết truy cập nhưng cấm họ viết lại lịch sử. Điều đó có nghĩa là bất kỳ nhà phát triển nào có ác cảm (hoặc vẫn đang vật lộn với đường cong học tập) đều có thể làm hỏng toàn bộ cơ sở mã. " • Bạn sai 100%. Thật dễ dàng để không cho phép nhấn vào repo trong khi vẫn cho phép truy cập ghi. Ngoài ra, mọi người đều có thể có bản sao của bao nhiêu repo tùy thích, vì vậy việc chuyển vào thùng rác sẽ không hoạt động.
Marnen Laibow-Koser

3
"Git nói rằng việc phân nhánh nên nhẹ nhàng, nhưng nhiều công ty đã gặp phải vấn đề chi nhánh bất hảo nghiêm trọng nên tôi đã nghĩ rằng việc phân nhánh phải là một quyết định quan trọng với chính sách nghiêm ngặt. Đây là nơi mà lực lượng thực sự tỏa sáng ..." • a "vấn đề chi nhánh lừa đảo"? Tại sao bạn nghĩ việc phân nhánh phải là một "quyết định quan trọng"? Trên thực tế, thật sự hữu ích khi có thể tạo các nhánh (riêng tư hoặc công khai) cho mỗi tính năng hoặc thử nghiệm mới, để mỗi người sống trong vũ trụ thay thế của riêng nó. Không giống như SVN, Git làm cho việc hợp nhất dễ dàng để điều này hoạt động rất tốt.
Marnen Laibow-Koser

3
Thực tế là câu trả lời này chỉ có một phiếu tán thành ngoài tôi (dường như là @Marnen) khiến tôi kinh ngạc vì câu trả lời này sai về mặt khách quan.
thay thế

-8

Việc sử dụng GIT thay thế cho việc quản lý dòng mã kém là phổ biến. Nhiều nhược điểm của Perforce là kết quả của các chiến lược phân nhánh tồi. Tương tự đối với bất kỳ công cụ tập trung nào khác. Nếu bạn phải tạo ra rất nhiều nhánh thì bạn đang làm sai. Tại sao các nhà phát triển cần tạo nhiều nhánh như vậy?

Ngoài ra, tại sao việc ngắt kết nối lại quan trọng đến vậy? Để ai đó có thể làm việc trên tàu? Đó là nơi duy nhất những ngày này bạn không thể có kết nối không dây. Và thậm chí hầu hết các chuyến tàu đều có WiFi.


9
Một số nhà phát triển thích tạo các nhánh để họ có thể dễ dàng cô lập và phân đoạn các phát triển khác nhau, nguyên mẫu, sửa lỗi, v.v. Thường phụ thuộc vào loại công việc. Các chi nhánh của Perforce khá nặng nề để quản lý so với các chi nhánh của Git & Mercurial, và do đó, có thể cần thực hiện một số cải tiến năng suất thực sự.
Greg Whitfield

8
Khả năng làm việc bị ngắt kết nối không phải lúc nào cũng liên quan đến ý tưởng làm việc trên tàu hoặc máy bay. Một số công ty có thể không có cơ sở hạ tầng mạng đáng tin cậy. Hoặc bạn có thể gặp sự cố mất điện, bảo trì máy chủ, khởi động chung, v.v. Nhưng tác dụng phụ của việc có thể làm việc bị ngắt kết nối là các hoạt động kiểm soát nguồn của bạn diễn ra nhanh chóng so với các hệ thống dựa vào mạng vòng quanh để làm bất cứ điều gì.
Greg Whitfield

6
Theo kinh nghiệm của tôi, việc sử dụng quy trình để kiểm soát mọi người là dấu hiệu của một thiết kế quy trình làm việc không tốt ngay từ đầu. Một quy trình làm việc nên tồn tại để giúp mọi người làm việc hiệu quả. Nếu nó không được sử dụng, có điều gì đó không ổn với nó, bởi vì nói chung, mọi người không phải kẻ ngốc và sẽ sử dụng một công cụ tốt hơn nếu họ bắt gặp nó.
Carl

6
Từ chối vì "Nếu bạn phải tạo ra nhiều nhánh, bạn đang làm sai." Điều đó có thể đúng trong một VCS tập trung với các công cụ hợp nhất không đầy đủ (như SVN hoặc CVS ​​- chưa bao giờ được sử dụng Perforce). Nó không đúng trong Git, nơi việc phân nhánh và hợp nhất rất dễ dàng và phổ biến. Điều này cho phép mỗi tính năng đang được phát triển tự do ở trong vũ trụ thay thế của riêng nó cho đến khi tích hợp. Cá nhân tôi, tôi sẽ không bao giờ trở lại một môi trường mà tôi không thể phân nhánh theo ý thích.
Marnen Laibow-Koser
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.