Git: Perforce sang Git - Tại sao cần chuyển đổi


Các khóa học qua video dành cho Hội viên:
Python Lập trình C Java C# SQL Server PHP HTML5-CSS3-JavaScript
<76K/month for all. Đăng ký Hội viên
Đăng ký nhận thông báo về những video mới nhất

Git là giải pháp SCM hàng đầu cho các nhà phát triển phần mềm. Sự quan tâm đến Git đã tăng lên đều đặn kể từ khi phát hành lần đầu vào năm 2005. Ngày nay, nó được phổ biến trong các nhóm chuyên nghiệp ở mọi quy mô, từ các nhà phát triển độc lập đến các doanh nghiệp lớn, cũng như các dự án nguồn mở quan trọng như Android và nhân Linux.

Tuy nhiên, Perforce, một hệ thống SCM tập trung thương mại, vẫn tạo được tiếng vang với các nhà phát triển trò chơi và các tập hợp con khác của các nhà phát triển phần mềm. Tại sao vậy? Để hiểu được sự hấp dẫn còn sót lại này, chúng ta sẽ phải xem xét một số lý do tại sao Git vượt qua Perforce và các hệ thống SCM tập trung khác để phát triển chung, và xem tại sao ngành công nghiệp phát triển trò chơi chậm chuyển đổi.

Làm thế nào Git ăn thế giới

Lùi một bước về năm 1995. Hai tùy chọn của bạn cho SCM là CVS và ClearCase. CVS là miễn phí và, tính năng khôn ngoan, đáng giá từng xu. ClearCase cực kỳ tốn kém nhưng mạnh mẽ: nó có thể xử lý các sự hợp nhất thực sự (lên tới 64 cách hợp nhất!), Các nhóm phát triển toàn cầu và các dự án phần mềm với nhiều mô-đun.

Bây giờ Perforce vào hình ảnh. Nó không miễn phí, nhưng nó rẻ hơn nhiều so với ClearCase. Nó không mạnh như ClearCase, nhưng nó tương đối nhanh và hoàn thành công việc. Và đó là công thức cho một sản phẩm SCM thương mại thành công. Thật vậy, khi ClearCase dần dần biến mất và Subversion đình trệ, một vài năm trước Perforce dường như đã chín muồi để áp dụng rộng rãi hơn.

Nhanh chóng chuyển tiếp đến hiện tại. Git hiện là công cụ SCM hàng đầu cho các nhà phát triển phần mềm. Chuyện gì đã xảy ra?

Tốc độ phân tán

Git được phân phối: mọi nhà phát triển có toàn bộ lịch sử kho lưu trữ mã của họ cục bộ. Điều này làm cho bản sao ban đầu của kho lưu trữ chậm hơn (trừ khi bạn đang sử dụng Smart Mirroring), nhưng các hoạt động tiếp theo như cam kết, đổ lỗi, tìm khác biệt, hợp nhất và đăng nhập nhanh hơn đáng kể.

Perforce, đối với hầu hết các phần, yêu cầu kết nối với máy chủ để thậm chí xem lịch sử thay đổi. Và máy chủ trung tâm duy nhất đó trở thành nút cổ chai khi các nhóm và dự án trở nên lớn hơn. Các lệnh như xem lịch sử ( thay đổi p4 ), tạo thẻ ( nhãn p4 hoặc thẻ p4), tạo nhánh (tích hợp p4 ) hoặc thậm chí tạo tệp có thể ghi trong không gian làm việc của bạn ( chỉnh sửa p4 ) yêu cầu quyền truy cập ghi vào máy chủ - đó là một nút cổ chai rõ ràng khi hàng ngàn người dùng đang truy cập máy chủ đó.

Giá cả

Perforce, mặc dù nó không còn công bố giá cả, được biết là nằm trong phạm vi vài trăm đô la cho mỗi người dùng để mua và một tỷ lệ phần trăm cho gia hạn hàng năm. Đối với các đội lớn hơn, nó cũng có thể yêu cầu phần cứng khá đắt cho máy chủ trung tâm lớn đó.

Git tự nó là nguồn mở và hoàn toàn miễn phí. Bitbucket Server, cung cấp hỗ trợ kỹ thuật và cài đặt tiền đề, là một phần chi phí của Perforce.

Tham gia một nhóm gồm 50 nhà phát triển. Bitbucket sẽ có giá 600 đô la mỗi năm so với hàng chục nghìn đô la cho Perforce. Điều đó thêm vào rất nhiều bữa trưa miễn phí cho các tin tặc làm việc chăm chỉ.

Quy trình làm việc

Tạm gác tất cả chuông và còi, về cơ bản, một công cụ SCM là về sự hợp tác: cho phép một nhóm các nhà phát triển làm việc trên một tập hợp các tệp phần mềm được chia sẻ. Git cung cấp phân nhánh đơn giản và rẻ tiền, tính toán, mở ra cánh cửa cho nhiều quy trình công việc thú vị . Phân nhánh nhiệm vụ, Git Flow, kho lưu trữ rẽ nhánh - có một quy trình làm việc nhanh chóng và dễ dàng cho bất kỳ loại nhóm nào từ nguồn mở đến phát triển chuyên nghiệp, được hỗ trợ bởi các công cụ cộng tác và đánh giá mã mạnh mẽ.

Git cũng giúp bạn dễ dàng hợp tác xuyên qua các ranh giới của công ty, một yêu cầu chung trong phát triển đa chức năng. Ngay cả khi không thể truy cập mạng vật lý vào kho lưu trữ chia sẻ Git, các công cụ vá và gói Git giúp chia sẻ dữ liệu đơn giản.

Perforce, mặt khác, duy trì một bản ghi phân nhánh trên cơ sở mỗi tệp, so với cơ sở cho mỗi cam kết với Git. Điều đó có nghĩa là gì? Chà, đối với người mới bắt đầu, nó tạo ra rất nhiều siêu dữ liệu trong cơ sở dữ liệu Perforce mỗi khi bạn tạo một nhánh. Điều đó góp phần giải quyết các vấn đề về hiệu suất khi triển khai lớn hơn, đến mức nhiều quản trị viên Perforce hạn chế tạo chi nhánh.

Hãy xem xét điều đó trong một lúc: mỗi khi bạn muốn tạo một nhánh nhiệm vụ để thử một tính năng mới, bạn phải đi và xin phép. Nếu bạn không thể tạo các nhánh nhiệm vụ, bạn có thể kiểm tra mã không ổn định trên nhánh chính hoặc chỉ cần đợi cho đến khi bạn thực hiện được trước khi thực hiện. Bạn hy sinh lợi ích của việc có CI / CD trên các nhánh nhiệm vụ của mình và có thể theo dõi tiến trình công việc chi tiết. Kết quả cuối cùng là giảm năng suất khi các nhà phát triển sống với quy trình công việc kém năng suất hơn hoặc chỉ bắt đầu sử dụng Git ở bên cạnh và tìm ra cách hợp nhất thủ công công việc của họ trở lại Perforce.

Bên cạnh việc đắt đỏ, các chi nhánh của Perforce không có lợi cho loại quy trình công việc mà hầu hết các nhà phát triển ưa thích. Các nhánh của Perforce được chia sẻ, vì vậy không có thứ gọi là nhánh nhiệm vụ riêng với việc nổi loạn định kỳ. Và các thuật toán hợp nhất của Perforce quá phức tạp, với toàn bộ các bài viết được viết về cách hợp nhất các tệp đã được đổi tên hoặc đã sửa đổi các thuộc tính của chúng.

Và chia sẻ mã giữa các máy chủ Perforce? Bạn quay lại chia sẻ các tập tin tar không có lịch sử chung. Mô hình dữ liệu của Perforce nghĩ rằng lịch sử phần mềm là duy nhất cho một máy chủ, so với khả năng dễ dàng sao chép và chia sẻ lịch sử của Git ở mọi nơi.

Chia sẻ tâm trí và cộng đồng

Gác lại các đối thủ thương mại, tại sao Git lại đánh bại Mercurial và các đối thủ xứng đáng khác? Tất nhiên có một số giá trị trong đà, và Git có nó. Git được Linus Torvalds tạo ra để giải quyết các thách thức phát triển phân tán của dự án nhân Linux và hiện là công cụ SCM tiêu chuẩn cho Linux, Android, OpenStack và hầu hết các dự án nguồn mở quan trọng khác. Đó là những gì tất cả những đứa trẻ tuyệt vời đang sử dụng - vì vậy nếu bạn là người quản lý tuyển dụng, có lẽ bạn có thể cho rằng một kỹ sư mới có thể (và sẽ muốn) làm việc với Git mà không cần đào tạo mở rộng.

Và, tất nhiên, bạn có toàn bộ sức mạnh của một cộng đồng nguồn mở sôi động đứng đằng sau Git. Git đang phát triển nhanh chóng để giải quyết các vấn đề trong thế giới thực, với các tính năng mới quan trọng như Git LFS xuất hiện. Bạn có thể đóng góp mã của riêng mình cho dự án Git nếu có lỗi bạn muốn sửa và bạn sẽ không bao giờ bị khóa trong một sản phẩm thương mại với lộ trình và tốc độ được đặt bởi một công ty. Chỉ cần nhìn vào phạm vi của các chương trình máy khách Git có sẵn: một số GUI máy tính để bàn mạnh mẽ, tích hợp Windows Explorer, plugin cho mọi IDE và công cụ dành cho nhà phát triển.

GUI và công cụ dành cho nhà phát triển

Trong những ngày đầu của Git, GUI và hỗ trợ công cụ có phần thiếu. Đây là một trở ngại cho những người dùng thích giao diện trực quan để tương tác với kho Git của họ. Các cộng tác viên phi kỹ thuật như nghệ sĩ trò chơi đặc biệt bị tước quyền. Plugin Windows Explorer của Perforce là một điểm nhấn với đối tượng này.

Nhưng rất may những ngày đó đã qua. GUI như Sourcetree  cung cấp trải nghiệm điểm và nhấp và có vô số tích hợp hệ vỏ cho Git. Bitbucket cung cấp đánh giá mã, hợp nhất và kéo các yêu cầu, chuyển đổi, duyệt mã trực tuyến và rất nhiều công cụ cộng tác khác. Thật vậy, tất cả mọi người từ các nhà khoa học dữ liệu đến các cơ quan sáng tạo đều tổ chức các cộng đồng sử dụng sự cộng tác mở mà Git và Bitbucket tạo ra.

Nhà phát triển trò chơi rất đặc biệt

Vì vậy, điều đó đã được nói, điều gì đã ngăn một số cộng đồng như các nhà phát triển và nhà nghiên cứu trò chơi làm việc với các tập dữ liệu khổng lồ nhảy vào bandwagon? Tất cả tập trung vào loại dữ liệu và sự phức tạp của tổ chức dự án.

Tệp nhị phân

Các nhà phát triển trò chơi, đặc biệt là các nghệ sĩ, cần phải làm việc với các đối tượng nhị phân lớn như kết cấu và tài sản âm thanh. Các nhà khoa học dữ liệu có thể có bộ dữ liệu khổng lồ bao gồm hàng tỷ mẫu sự kiện .

Điều đó đặt ra hai vấn đề cho Git.

  • Những tập tin này không thể được hợp nhất. Một cơ chế khóa tập trung là tiện dụng và Perforce cung cấp một cơ chế. (Tuy nhiên, lưu ý rằng ngay cả một máy chủ tập trung chỉ cung cấp cơ chế khóa trên một nhánh duy nhất, do đó, dựa vào tính năng này ngụ ý rằng bạn có quy trình làm việc rất hạn chế.)

  • Các tệp này khiến Git chậm lại khi kích thước của kho lưu trữ tăng lên.

Vấn đề kích thước kho lưu trữ phần lớn được giải quyết bởi Git LFS , một phần mở rộng cho phép Git xử lý các tệp lớn trong khi ủy quyền lưu trữ tệp thực tế ở nơi khác.

Vấn đề khóa tập tin gấu kiểm tra trên hai mặt trận. Từ góc độ quản lý cấu hình phần mềm, Git LFS có một loại khóa tập tin vượt trội trên lộ trình. Git LFS sẽ giúp phối hợp khóa các tệp nhị phân trên nhiều nhánh bằng thuật toán đảm bảo bạn đang làm việc trên phiên bản mới nhất, bất kể bạn đang ở nhánh nào. Điều đó mở ra các luồng công việc phân nhánh cho người dùng làm việc với các tệp nhị phân lớn, so với mô hình khóa một nhánh của Perforce.

Nó cũng hữu ích để suy nghĩ về việc khóa tập tin như là một vấn đề phối hợp. Nếu bạn sẽ bắt đầu làm việc trên một tài sản chung không thể hợp nhất, làm thế nào để bạn truyền đạt kiến ​​thức đó cho tất cả các bên quan tâm? Một lần nữa, đây là nơi mà sự ra đời của quy trình công việc hiện đại sử dụng các yêu cầu kéo và cộng tác nhóm thời gian thực thực sự tỏa sáng. Bạn có thể nhanh chóng truyền đạt ý định của mình bằng HipChat và kiểm tra xem liệu có bất kỳ công việc nổi bật nào đang diễn ra trên một tệp cụ thể không.

Thật thú vị khi xem xét vấn đề xử lý các tệp lớn sẽ phát triển như thế nào trong kỷ nguyên của Dữ liệu lớn. Để kiểm tra công việc phân tích Dữ liệu lớn, bạn có thể cần một bộ dữ liệu có kích thước vài terabyte. Hãy quên bất kỳ hệ thống SCM nào - dự án này được kiểm tra và chạy trên hệ thống tệp tương thích với Dữ liệu lớn. Điều cần thiết ở đây là một hệ thống CI / CD có thể bố trí một đường ống phức tạp hơn với các tạo tác sống trên HDFS hoặc S3. Điều đó dẫn đến chủ đề tiếp theo của chúng tôi.

Dự án lớn

Phát triển trò chơi là một ví dụ cổ điển về một dự án phần mềm có nhiều mô-đun hoặc thành phần - công cụ trò chơi, giao diện người dùng, nghệ thuật tĩnh, kết xuất video, v.v. Perforce như một kho lưu trữ tập trung nguyên khối có thể lưu trữ tất cả các mô-đun này trong một máy chủ và cho phép người dùng chọn phần nào để chọn vào không gian làm việc của riêng họ.

Tuy nhiên, lợi thế này phần lớn là moot bây giờ. Các hệ thống Git hiện đại như Bitbucket cung cấp khả năng quản lý dễ dàng hơn các công cụ đa mô đun Git như mô đun con và cây con. Và quan trọng hơn, các dự án lớn như Android đã chỉ ra cách quản lý một dự án phức tạp bằng các công cụ sáng tác cấp cao hơn. Nhiều bài học trong số này đã được đưa vào các công cụ CI / CD hiện đại như Đường ống tre và Bitbucket, có thể điều phối các quy trình tích hợp liên tục phức tạp, mô hình hóa sự phụ thuộc giữa các dự án và quản lý các tạo tác giữa các dự án.

Xu hướng này phần lớn tuân theo triết lý Git (và * nix) về việc xây dựng một công cụ thực hiện một công việc duy nhất rất tốt. Tích hợp liên tục và phân phối liên tục (CI / CD) là một cách thực hành của riêng mình, với các công cụ được dành riêng để hiểu quy trình xây dựng và phát hành. Nó cũng phù hợp với các thực tiễn tốt nhất về phát triển phần mềm hiện đại , nhằm mục đích sử dụng các dịch vụ siêu nhỏ khép kín thay vì các dự án nguyên khối.

Bước tiếp theo

Rõ ràng có một số động lực trong trại hè Perforce đến Git, và các công cụ CI / CD hiện đại của Git và hiện đang sẵn sàng để xử lý các nỗ lực phát triển lớn nhất và phức tạp nhất. Thật vậy, Perforce thậm chí đã tạo ra một công cụ có tên Git Fusion cho phép bạn trích xuất một phần của kho lưu trữ Perforce trung tâm dưới dạng repo Git.

Thật không may, trong khi Git Fusion là một nỗ lực cao cả, thì việc cố gắng đưa Git lên một hệ thống SCM tập trung không phải là điều rất dễ dàng; nếu bạn cố gắng trộn các mô hình sử dụng của mình, bạn hoàn toàn có thể dễ dàng làm hỏng chế độ xem dữ liệu của một hệ thống. Nếu bạn không kết hợp các mô hình sử dụng của mình, thật khó để thấy giá trị của việc đặt một phụ trợ tập trung thương mại phía sau Git. Xu hướng như chúng ta đã thấy thực sự theo một hướng khác: làm thế nào để bạn đặt một vài SCM tập trung cuối cùng còn lại hữu ích vào Git?

Nếu bạn đang sử dụng Perforce cho bất kỳ phần mềm hoặc phát triển trò chơi nào, có lẽ bạn đang tự hỏi (lo lắng) về cách di chuyển sang Git. Làm thế nào để bạn thậm chí làm điều đó? Và nó có đáng với chi phí chuyển đổi? Đó chính xác là những gì chúng tôi sẽ đề cập trong bài viết tiếp theo.

» Next: Git: Các bước chuyển từ Perforce sang Git
« Prev: Git: Chia sẻ
Các khóa học qua video dành cho Hội viên:
Python Lập trình C Java C# SQL Server PHP HTML5-CSS3-JavaScript
<76K/month for all. Đăng ký Hội viên
Copied !!!