056.2 Bài 1
Chứng chỉ: |
Open Source Essentials |
---|---|
Phiên bản: |
1.0 |
Chủ đề: |
056 Cộng tác và Giao tiếp |
Mục tiêu: |
056.2 Quản lý Mã nguồn |
Bài học: |
1 trên 1 |
Giới thiệu
Bất kỳ ai đã từng hiệu đính một tài liệu văn bản trong phạm vi nhóm đều hiểu loại công việc cộng tác như vậy có thể phát sinh những vấn đề gì: Phiên bản nào là phiên bản hiện tại? Phiên bản này được lưu ở đâu? Có ai đó hiện đang chỉnh sửa văn bản này không? Ai đã đưa ra những bình luận hoặc thay đổi trên văn bản — khi nào và tại sao? Kết quả của những vấn đề này thường là một cơ số các phiên bản khác nhau của tài liệu và trong trường hợp tệ nhất sẽ là một tập hợp các phiên bản mà không ai thực sự nắm bắt rõ được.
Hãy tưởng tượng một dự án phần mềm với hàng trăm tệp nơi các nhà phát triển từ khắp nơi trên thế giới đang làm việc bằng cách phát triển các tính năng mới, sửa lỗi, tách các phần và phát triển chúng một cách biệt lập, v.v. Sẽ không thể quản lý được một quy trình phát triển như vậy nếu không có các công cụ phù hợp.
Phần mềm đặc biệt dành cho việc quản lý mã nguồn (Source Code Management - SCM) — hay còn được gọi là hệ thống kiểm soát phiên bản (Version Control Systems - VCS) hoặc hệ thống kiểm soát sửa đổi (Revision Control Systems - RCS) — cung cấp một giải pháp để khắc phục hoặc loại bỏ các vấn đề vừa được nêu ở trên.
Trong thế giới phát triển phần mềm, SCM như một trụ cột cơ bản bảo vệ tính toàn vẹn của cơ sở mã. Hãy hình dung nó như một người bảo vệ cần cù và tỉ mỉ theo dõi mọi điều chỉnh và thay đổi được thực hiện đối với mã nguồn theo thời gian.
Hệ thống Quản lý Mã nguồn và Kho lưu trữ
Hệ thống quản lý mã nguồn là trái tim của một dự án phần mềm. Mặc dù các công việc quan trọng cũng diễn ra trên các diễn đàn thảo luận và những nơi khác nhưng hệ thống SCM sẽ đại diện cho toàn bộ lịch sử của dự án cũng như trạng thái hiện tại của nó như một thực thể sống.
Kho lưu trữ (repository) mã nguồn là một loại xưởng kỹ thuật số cho một dự án. Giống như một xưởng vật lý lưu trữ tất cả các công cụ và vật phẩm cần thiết để sản xuất một phôi thành phẩm, một kho lưu trữ mã nguồn cũng sẽ lưu trữ tất cả các tệp, tài liệu và mã liên quan đến một dự án phần mềm. Nó cung cấp một môi trường có cấu trúc để tổ chức và quản lý toàn bộ tài sản của dự án.
Thông tin thường được lưu trữ dưới dạng một cây thư mục. Các hệ thống SCM thường sử dụng mô hình máy khách-máy chủ nơi bất kỳ người dùng nào cũng có thể tải xuống (pull) dữ liệu từ kho lưu trữ cũng như đẩy (push) dữ liệu lên đó. Hệ thống sẽ theo dõi xem ai đã thực hiện những thay đổi nào và thực hiện vào thời điểm nào nhằm đảm bảo tính minh bạch và trách nhiệm giải trình trong nhóm phát triển.
Hãy tưởng tượng rằng chúng ta đang làm việc trong một dự án với nhiều nhà phát triển và phát hiện ra một lỗi trong mã. Với SCM, chúng ta có thể dễ dàng kiểm tra các thay đổi giữa các phiên bản để xác định chính xác sự thay đổi cụ thể nào đã gây ra lỗi.
Vì hệ thống sẽ ghi nhớ từng phiên bản của các tệp khi chúng thay đổi nên người dùng có thể truy cập vào bất kỳ phiên bản nào trong số các phiên bản này và có thể quay lại các phiên bản trước đó (trong trường hợp xảy ra các thay đổi không chính xác). Vì vậy, kho lưu trữ cũng là một loại lưu trữ cấp quyền truy cập vào mọi thay đổi từng được thực hiện đối với dự án và trạng thái của dự án tại bất kỳ thời điểm nào trong lịch sử của dự án.
Hệ thống SCM có thể tiết kiệm không gian bằng cách theo dõi các thay đổi đối với tệp thay vì lưu trữ toàn bộ tệp mỗi khi có thay đổi. Phương pháp lưu trữ hiệu quả này sẽ đảm bảo được rằng mọi phiên bản trong lịch sử dự án đều có thể truy cập được mà không tiêu tốn quá nhiều tài nguyên.
Có nhiều công cụ (chẳng hạn như công cụ tích hợp liên tục/phân phối liên tục (CI/CD) và thử nghiệm) xoay quanh hệ thống SCM. Nhiều người cũng xây dựng danh tiếng của mình thông qua hệ thống bằng cách làm cho những đóng góp của họ có thể được mọi người nhìn thấy. Do đó, việc quản lý mã nguồn không chỉ là theo dõi các thay đổi mà còn là bảo toàn tính toàn vẹn của cơ sở mã, thúc đẩy sự hợp tác giữa các nhà phát triển và đảm bảo rằng các dự án có thể được phát triển trong một bối cảnh năng động và luôn thay đổi.
Các hệ thống SCM phổ biến bao gồm Git, Subversion và CVS. Giống như nhiều chức năng phần mềm khác, SCM hiện nay thường được cung cấp bởi các nhà cung cấp chuyên biệt. Nói cách khác, đây chính là Phần mềm dưới dạng Dịch vụ (SaaS) hoặc dịch vụ “đám mây”: những người tham gia sẽ lưu phần mềm trong hệ thống cục bộ của họ để quản lý các thay đổi cá nhân nhưng sẽ tải các thay đổi của họ lên kho lưu trữ trung tâm để được hưởng lợi từ các tính năng đám mây thông thường như thời gian hoạt động 24/7, sao lưu và truy cập an toàn.
Hàng triệu nhà phát triển hiện đang sử dụng các dịch vụ đám mây, đặc biệt là GitHub. GitLab là một giải pháp thay thế dựa trên mã nguồn mở của GitHub. Cả GitHub và GitLab đều cho phép mọi người làm việc trong kho lưu trữ đám mây của nhà cung cấp hoặc thiết lập một phiên bản cục bộ của hệ thống SCM. Một lợi thế khi làm việc trên các hệ thống đó là danh tiếng mà người ta có thể đạt được thông qua các hệ thống “đánh giá sao” của họ cho phép người dùng đánh giá công việc của nhau. Các dịch vụ đám mây cũng bổ sung thêm các điểm hấp dẫn như trình theo dõi yêu cầu thay đổi, hệ thống đánh giá, wiki và các diễn đàn thảo luận.
Kho lưu trữ có thể chứa cả dự án cá nhân và doanh nghiệp — nghĩa là chúng không nhất thiết chỉ dành riêng cho mục đích sử dụng của doanh nghiệp. Bất kỳ nhà phát triển nào muốn bắt đầu một dự án phát triển hoặc làm việc trên một dự án mã nguồn mở — sao chép và sửa đổi theo nhu cầu của họ — đều có thể làm như vậy. Trong tất cả các trường hợp này, điều quan trọng là chúng ta phải kiểm soát chặt chẽ những người có thể truy cập vào kho lưu trữ.
Việc hiểu rõ các thuật ngữ xoay quanh vấn đề kiểm soát phiên bản và quản lý mã nguồn là một điều cần thiết để điều hướng việc sử dụng nó. Trong các phần sau, chúng ta sẽ xem xét kỹ hơn một số khái niệm và thuật ngữ này.
Cam kết, Thẻ và Nhánh
Nhà phát triển sẽ tạo một cam kết (commit) mỗi lần một thay đổi được đẩy lên kho lưu trữ. Các cam kết sẽ đại diện cho ảnh chụp tức thời của các thay đổi được thực hiện đối với cơ sở mã tại một thời điểm cụ thể. Mỗi cam kết đều sẽ bao gồm các siêu dữ liệu như tên tác giả, dấu thời gian và thông báo mô tả giải thích các thay đổi. Các cam kết sẽ giúp nhà phát triển theo dõi được sự phát triển của cơ sở mã và nắm rõ lịch sử của các thay đổi cụ thể.
Hãy xem xét một nhóm các nhà phát triển đang làm việc trên một ứng dụng web. Mỗi lần họ thực hiện các thay đổi đối với cơ sở mã, họ sẽ tạo một cam kết để ghi lại những thay đổi đó. Ví dụ: một người nào đó thêm một tính năng mới vào ứng dụng có thể tạo một cam kết với thông báo như “Đã thêm tính năng xác thực người dùng” (bằng tiếng Anh). Cam kết này sẽ ghi lại trạng thái của cơ sở mã sau khi tính năng được triển khai.
Khi nhà phát triển sửa một lỗi, thông báo cam kết thường sẽ nhắc đến số (thứ tự) của lỗi trong hệ thống theo dõi lỗi của dự án.
Thẻ (tag) là các tham chiếu được đặt tên cho các cam kết cụ thể. Chúng thường được sử dụng để đánh dấu các điểm quan trọng trong lịch sử dự án (chẳng hạn như các bản phát hành hay các cột mốc). Thẻ cung cấp cho chúng ta một phương thức gắn nhãn và tham chiếu đến các phiên bản quan trọng của cơ sở mã để giúp việc quản lý và điều hướng lịch sử của dự án trở nên dễ dàng hơn.
Nhánh (branch) có thể phát huy tác dụng khi các nhà phát triển cần làm việc trên nhiều tác vụ khác nhau cùng một lúc. Nhánh là các dòng phát triển độc lập tách biệt khỏi cơ sở mã chính. Chúng cho phép các nhà phát triển làm việc trên các tính năng hoặc các bản sửa lỗi một cách riêng biệt mà không ảnh hưởng đến cơ sở mã chính cho đến khi chúng đã sẵn sàng để tích hợp. Nhánh có thể giúp chúng ta tổ chức các công việc phát triển và tạo điều kiện cho sự hợp tác giữa các thành viên trong nhóm.
Ví dụ: nếu một nhà phát triển đang làm việc để thêm một tính năng mới vào ứng dụng trong khi một người khác đang sửa lỗi, mỗi người có thể tạo các nhánh riêng biệt để cô lập các thay đổi của mình. Khi công việc của họ hoàn tất, họ có thể gộp các nhánh của mình trở lại cơ sở mã chính (Branches).
Khi nhiều người làm việc trên cùng một tệp hoặc đang đưa tệp vào một nhánh khác, đôi khi sẽ xảy ra trường hợp hai người đã thực hiện thay đổi trên cùng một dòng của tệp. Khi người thứ hai cố gắng đưa thay đổi vào, hệ thống sẽ cảnh báo về xung đột.
Một số VCS sẽ không cho phép nhà phát triển đưa tệp vào nếu tệp đó có xung đột với phiên bản hiện tại trong kho lưu trữ. Nhà phát triển sẽ phải kiểm tra phiên bản hiện tại và tìm cách giải quyết xung đột, sau đó mới có thể đưa phiên bản mới của họ vào.
Các hệ thống dựa trên đám mây cho phép gộp (merge requests) hoặc tải yêu cầu (pull requests). Những yêu cầu này được tạo bởi một nhà phát triển đã làm việc trên một hệ thống hoặc một nhánh cục bộ và tin rằng những thay đổi của họ phù hợp để đưa vào một nhánh khác. Các nhà phát triển nhánh mục tiêu sẽ quyết định xem có chấp nhận yêu cầu hay không.
Kho lưu trữ phụ
Chúng ta sẽ thường gặp phải trường hợp cần tới mã của một dự án độc lập khác (ví dụ như trình phát phương tiện) để phát triển một dự án phần mềm (ví dụ như một trang web phức tạp). Thay vì sao chép một phần hoặc toàn bộ mã của trình phát phương tiện vào dự án, nhiều VCS có cung cấp tính năng kho lưu trữ phụ (subrepositories) — hay còn được gọi là mô-đun con (submodules).
Trong ví dụ của chúng ta, kho lưu trữ của trình phát phương tiện đã được tích hợp vào kho lưu trữ của trang web dưới dạng một kho lưu trữ phụ. Sau đó, nó xuất hiện dưới dạng một thư mục riêng biệt trong cây thư mục. Điều này có nghĩa là cơ sở mã của trình phát phương tiện hoàn toàn có sẵn nhưng vẫn là độc lập. Nếu cần, thậm chí nó cũng có thể được cập nhật từ kho lưu trữ gốc của trình phát phương tiện.
Khả năng này đã tự chứng minh giá trị của nó trong việc xử lý các dự án phức tạp với nhiều phần phụ thuộc hoặc tích hợp các thư viện và bộ khung của bên thứ ba vào một cơ sở mã. Các mô-đun con sẽ tăng cường tổ chức dự án và tạo điều kiện cho việc cộng tác bằng cách cho phép các nhà phát triển làm việc với các cơ sở mã được kết nối với nhau một cách hiệu quả.
Ứng dụng chung của một Hệ thống Quản lý Kiểm soát Nguồn
Mỗi một cá nhân tham gia dự án sẽ bắt đầu bằng cách tạo một hồ sơ — thường được liên kết với địa chỉ email của riêng cá nhân đó. Một hệ thống dựa trên đám mây sẽ quản lý hồ sơ thông qua các tài khoản giống như các trang mạng xã hội và các tổ chức khác.
Các nhà phát triển mới sẽ trải qua một trình tự như sau khi sử dụng một hệ thống SCM:
-
Cài đặt phần mềm SCM nếu hệ điều hành của người dùng chưa có phần mềm này.
-
Đưa toàn bộ dự án vào hệ thống cục bộ một lần hay còn được gọi là nhân bản (cloning).
-
Từ bước này trở đi sẽ là làm việc cục bộ (trong một hoặc nhiều nhánh nếu cần) và đẩy các thay đổi vào kho lưu trữ.
-
Tải phiên bản mới nhất từ kho lưu trữ trước phiên làm việc tiếp theo.
Người quản lý dự án sẽ quyết định việc tin tưởng và cấp quyền truy cập vào kho lưu trữ cho những ai. Các nhà phát triển cao cấp có trách nhiệm quan trọng trong việc quyết định xem các thay đổi do những người đóng góp khác gửi tới đã sẵn sàng để được đưa vào nhánh chính của kho lưu trữ hay chưa.
Trên các hệ thống dựa trên đám mây, một chủ sở hữu dự án có thể kiểm soát khả năng truy cập vào kho lưu trữ bằng cách đặt khả năng hiển thị của kho lưu trữ thành công khai hoặc riêng tư. Kho lưu trữ công khai sẽ cấp quyền đọc cho bất kỳ ai trên internet. Tuy nhiên, kho lưu trữ riêng tư sẽ chỉ giới hạn quyền truy cập cho chủ sở hữu, những cá nhân mà chủ sở hữu đã chia sẻ quyền truy cập và các thành viên cụ thể của tổ chức trong trường hợp kho lưu trữ thuộc về tổ chức.
Hãy tưởng tượng có một nhóm các nhà phát triển làm việc trên một trang web thương mại điện tử. Họ quyết định thêm một tính năng mới để cho phép khách hàng theo dõi các đơn hàng của mình. Để triển khai tính năng này, họ đã tạo một nhánh tính năng có tên như order-tracking
nơi họ có thể làm việc trên các thay đổi mã cần thiết mà không ảnh hưởng đến cơ sở mã chính. Sau khi tính năng được hoàn tất và đã qua thử nghiệm, họ sẽ hợp nhất nhánh này vào nhánh phát triển chính để tích hợp và thử nghiệm thêm.
Nhánh phát triển chính sẽ đóng vai trò là trung tâm nơi tất cả các tính năng mới được tập hợp lại để thử nghiệm. Ví dụ: nếu nhiều nhà phát triển đang cùng lúc làm việc trên các tính năng khác nhau, họ có thể hợp nhất các nhánh tính năng của mình vào nhánh phát triển để đảm bảo cho mọi thứ có thể hoạt động trơn tru. Quy trình tích hợp này sẽ giúp xác định và giải quyết mọi xung đột hoặc các vấn đề về tương thích ngay từ đầu.
Khi đến thời điểm phát hành phiên bản mới của trang web thương mại điện tử, nhóm phát triển sẽ tạo một nhánh phát hành (chẳng hạn như v2.0
) từ nhánh phát triển. Họ sẽ tập trung vào việc ổn định cơ sở mã, sửa mọi lỗi xuất hiện ở phút chót và tiến hành thử nghiệm kỹ lưỡng để đảm bảo việc phát hành có thể được suôn sẻ. Khi bản phát hành đã sẵn sàng, mã từ nhánh phát hành sẽ được triển khai vào sản xuất và chu kỳ sẽ bắt đầu lại.
Hệ thống Kiểm soát Phiên bản Chung
Một trong số các hệ thống kiểm soát phiên bản nổi tiếng nhất là Git, Subversion (còn gọi là SVN) và CVS. Tất cả các hệ thống này đều là mã nguồn mở.
Git là một hệ thống kiểm soát phiên bản phân phối được sử dụng rộng rãi trong phát triển phần mềm và các lĩnh vực khác. Khi sử dụng Git, mỗi nhà phát triển sẽ có một bản sao cơ sở mã đầy đủ trên máy tính của họ.
Cách tiếp cận phi tập trung này cho phép các nhà phát triển làm việc ngoại tuyến và cộng tác một cách liền mạch mà không cần dựa vào một máy chủ trung tâm. Điều này có nghĩa là các nhà phát triển có thể làm việc độc lập trên các tính năng hoặc các bản sửa lỗi khác nhau và hợp nhất các thay đổi lại với nhau một cách liền mạch. Ngay cả khi máy chủ trung tâm đang ngoại tuyến, các nhà phát triển vẫn có thể tiếp tục làm việc và chia sẻ các bản cập nhật với nhau.
Hãy cùng xem xét sự phát triển của hạt nhân Linux ban đầu dựa trên hệ thống kiểm soát phiên bản tập trung có tên là BitKeeper. Khi BitKeeper không còn miễn phí, Linus Torvalds và cộng đồng Linux đã phát triển Git như một giải pháp thay thế phân phối. Quyết định này cho phép chúng ta phát triển phi tuyến tính và xử lý hiệu quả các dự án lớn như nhân Linux. Sự thành công của Git đối với nhân Linux — một dự án cực kỳ phức tạp với hàng nghìn nhà phát triển và vô số nhánh — đã cho thấy sức mạnh và khả năng mở rộng của Git.
Hầu hết các phần mềm phát triển hiện nay đều sử dụng Git. Các dịch vụ SaaS cực kỳ phổ biến cũng đều được xây dựng dựa trên Git.
Git xử lý xung đột bằng cách cung cấp cho nhà phát triển một tệp có cả hai phiên bản của dòng đã thay đổi và đánh dấu rõ ràng phiên bản tệp nơi các dòng đó bắt nguồn. Nhà phát triển sẽ phải quyết định cách giải quyết xung đột và đưa ra một phiên bản nhất quán của tệp.
Subversion (SVN) có lẽ là hệ thống SCM phổ biến nhất trước khi Git được phát minh. Không giống như Git, Subversion được tập trung hóa: lịch sử phiên bản sẽ nằm trên một máy chủ trung tâm. Các nhà phát triển sẽ kết nối với máy chủ này để thực hiện các thay đổi nhằm đảm bảo rằng mọi người đều sẽ làm việc với phiên bản mới nhất của cơ sở mã.
Giả sử chúng ta là thành viên của một nhóm phát triển làm việc trên một dự án sử dụng Subversion. Mỗi lần cần thực hiện thay đổi đối với cơ sở mã, chúng ta sẽ kết nối với máy chủ SVN trung tâm để kiểm tra bản sao đang hoạt động của mã. Điều này sẽ đảm bảo được rằng chúng ta đang làm việc với phiên bản mới nhất của dự án. Sau khi thực hiện thay đổi, chúng ta sẽ tạo cam kết và đẩy chúng trở lại máy chủ và cập nhật các sửa đổi tới kho lưu trữ trung tâm. Quy trình làm việc tập trung sẽ giúp duy trì tính nhất quán và đảm bảo rằng mọi người đều đang làm việc hướng tới cùng một mục tiêu.
Trước Subversion, CVS là một hệ thống kiểm soát phiên bản tập trung rất phổ biến. Một số vấn đề về thiết kế của CVS đã dẫn đến việc Subversion được thiết kế và phát triển như một giải pháp thay thế.
Bài tập Hướng dẫn
-
Hãy kể tên ba tính năng cốt lõi của hệ thống SCM.
-
Hãy mô tả khái niệm gắn thẻ trong hệ thống SCM và giải thích lý do tại sao nó lại quan trọng đối với việc quản lý các bản phát hành phần mềm.
-
Sự khác biệt giữa nhánh và kho lưu trữ phụ trong hệ thống SCM là gì?
Bài tập Mở rộng
-
Hãy so sánh Git và Subversion (SVN) trên phương diện kiến trúc và quy trình làm việc của chúng.
-
“Chỉ mục chính” (index) hoặc “vùng dựng” (staging area) trong Git là gì?
-
Hãy phác hoạ chiến lược phân nhánh dựa trên trục (trunk) trong Git.
-
Hệ thống SCM nào sau đây là mã nguồn mở?
Git
Mercurial
Subversion
GitHub
Bitbucket
GitLab
Tóm tắt
Bài học này đã giải thích vai trò trung tâm của hệ thống quản lý mã nguồn trong phát triển phần mềm hiện đại. Chúng ta đã học về các thuật ngữ cơ bản cũng như cách sử dụng hệ thống bao gồm kho lưu trữ, nhánh, thẻ và tính năng hợp nhất.
Đáp án Bài tập Hướng dẫn
-
Hãy kể tên ba tính năng cốt lõi của hệ thống SCM.
-
Ghi nhật ký thay đổi đối với mã nguồn
-
Quản lý các truy cập (đồng thời) vào mã nguồn của các nhà phát triển
-
Khả năng khôi phục bất kỳ trạng thái phát triển nào của các tệp hoặc toàn bộ dự án
-
-
Hãy mô tả khái niệm gắn thẻ trong hệ thống SCM và giải thích lý do tại sao nó lại quan trọng đối với việc quản lý các bản phát hành phần mềm.
Gắn thẻ là hoạt động gán nhãn mô tả hoặc tên cho các cam kết cụ thể trong cơ sở mã; nó đóng vai trò là điểm đánh dấu cho các điểm quan trọng trong lịch sử của dự án (chẳng hạn như các bản phát hành hoặc các cột mốc). Các thẻ này sẽ cung cấp một phương thức thuận tiện để tham chiếu đến các phiên bản cụ thể của cơ sở mã và theo dõi sự phát triển của dự án theo thời gian.
-
Sự khác biệt giữa nhánh và kho lưu trữ phụ trong hệ thống SCM là gì?
Nhánh là một dòng phát triển song song trong một dự án (chẳng hạn như để sửa lỗi hoặc phát triển các tính năng mới) thường được hợp nhất trở lại nhánh phát triển chính ngay khi nhiệm vụ được hoàn thành. Kho lưu trữ phụ hoặc mô-đun con là một dự án độc lập có kho lưu trữ được tích hợp vào một dự án để truy cập vào cơ sở mã của dự án đó. Kho lưu trữ phụ sẽ xuất hiện dưới dạng một thư mục trong cây thư mục của dự án và luôn giữ trạng thái độc lập.
Đáp án Bài tập Mở rộng
-
Hãy so sánh Git và Subversion (SVN) trên phương diện kiến trúc và quy trình làm việc của chúng.
Git là một hệ thống kiểm soát phiên bản phân tán (DVCS) cho phép mỗi nhà phát triển có một bản sao hoàn chỉnh của cơ sở mã và làm việc ngay cả khi ngoại tuyến trên mã nguồn. Git đã trở nên phổ biến rộng rãi trong số các nhà phát triển do tốc độ, tính linh hoạt và khả năng phân nhánh và hợp nhất mạnh mẽ của nó. SVN là VCS tập trung với lịch sử phiên bản nằm trên một máy chủ trung tâm. Nó vẫn phổ biến trong một số môi trường doanh nghiệp do bản chất tập trung và bộ tính năng hoàn thiện của nó.
-
“Chỉ mục chính” (index) hoặc “vùng dựng” (staging area) trong Git là gì?
Chỉ mục hoặc vùng dựng là một lớp trung gian giữa bản sao làm việc cục bộ của dự án và phiên bản hiện tại trên máy chủ. Đây là tệp lưu trữ tất cả thông tin cho lần cam kết tiếp theo của người dùng.
-
Hãy phác hoạ chiến lược phân nhánh dựa trên trunk trong Git.
Phát triển dựa trên trục là chiến lược nhấn mạnh việc tích hợp thường xuyên các thay đổi vào cơ sở mã chính (trục). Các nhà phát triển sẽ làm việc trên các nhánh tính năng tồn tại trong thời gian ngắn và hợp nhất chúng vào trunk nhiều lần trong ngày để đảm bảo việc tích hợp liên tục và phản hồi nhanh chóng.
-
Hệ thống SCM nào sau đây là mã nguồn mở?
Git
X
Mercurial
X
Subversion
X
GitHub
Bitbucket
GitLab
X