GitHub là gì? Vai trò của GitHub trong lập trình
GitHub là một nền tảng và dịch vụ đám mây giúp phát triển phần mềm và quản lý nhiều phiên bản mã nguồn của dự án bằng Git.

Cho dù bạn là nhà phát triển, người quản lý dự án hay người đam mê công nghệ thì vai trò của GitHub trong lập trình rất quan trọng. Vì GitHub không chỉ là một nền tảng lưu trữ mã, đó là trung tâm cộng tác, đổi mới và kiểm soát phiên bản, là một công cụ có giá trị đã cách mạng hóa cách các nhóm và cá nhân làm việc trong các dự án phần mềm.
Trong bài viết này, chúng ta sẽ khám phá GitHub là gì, thuật ngữ chính, tính năng, ưu và nhược điểm cũng như cách sử dụng nó một cách hiệu quả. Nếu bạn chưa sử dụng GitHub bao giờ, tôi hi vọng bài viết này sẽ cho bạn chỉ dẫn cụ thể về GitHub.
1. Github là gì?

1.1. Tổng quan về GitHub
GitHub là một nền tảng và dịch vụ đám mây giúp phát triển phần mềm và quản lý nhiều phiên bản mã nguồn của dự án bằng Git, cho phép các nhà phát triển lưu trữ, quản lý cùng lúc nhiều phiên bản mã nguồn và cộng tác với những người khác.
GitHub được phát triển từ tháng 10/2007 và được ra mắt vào tháng 4/2008 bởi các nhà sáng lập Tom Preston-Werner, Chris Wanstrath, P. J. Hyett và Scott Chacon.
1.2. Sự khác biệt giữa Git và GitHub
Git là hệ thống kiểm soát phiên bản mã nguồn mở được sử dụng phổ biến cho các dự án lớn và nhỏ.
Git là gì? Tổng quan về Git cơ bản cho lập trình viên
Git là một hệ thống quản lý phiên bản phân tán được sử dụng để theo dõi và quản lý các sự thay đổi trong mã nguồn trong suốt quá trình phát triển phần mềm.
GitHub là Git Server, nơi mọi người chia sẻ và cộng tác trên mã nguồn họ tạo ra. GitHub sử dụng hệ thống kiểm soát phiên bản là Git. GitHub đơn giản hoá việc sử dụng Git mà không cần tới giao diện dòng lệnh.
1.3. Các sự lựa chọn thay thế cho GitHub
Dù GitHub có thể là Git Server lớn nhất hiện có nhưng bạn cũng có thể thử những nền tảng khác như Bitbucket, GitLab, SourceForge và Google Cloud Source Repositories.
Dưới đây là bảng so sánh sự khác nhau giữa các nền tảng này:
| SourceForge | GitHub | Bitbucket | Google Cloud Source Repositories | GitLab | |
|---|---|---|---|---|---|
| Loại Hosting | Công khai và riêng tư | Công khai và riêng tư | Công khai và riêng tư | Riêng tư | Công khai và riêng tư |
| Hệ thống Quản lý Phiên bản | Git, SVN, Mercurial, Bazaar | Git | Git | Git | Git |
| Công cụ cộng tác mã nguồn | Có | Có | Có | Có | Có |
| Issue tracking | Có | Có | Có | Không | Có |
| Quản lý dự án | Có | Có | Có | Không | Có |
| CI/CD | Có | Có (qua GitHub Actions) | Có (qua Pipelines) | Có (qua Cloud Build) | Có |
| Code review | Có | Có (qua Pull Request) | Có (qua Pull Request) | Không | Có (qua Pull Request) |
| Tính năng Bảo mật | Hạn chế | Có | Có | Có (Tích hợp với GCP) | Có (Quản lý phân quyền truy cập) |
| Hệ sinh thái tích hợp | Hạn chế | Rộng rãi | Rộng rãi | Tích hợp với GCP | |
| Cộng đồng | Có | Rộng rãi | Rộng rãi | Hạn chế (Tự động triển khai phần mềm) | Rộng rãi |
| Giới hạn kích thước file | Đa dạng (Tùy thuộc vào loại file) | Có (100 MB miễn phí) | Có (LFS cho file lớn) | Có (100 MB) | Đa dạng (Tùy thuộc vào loại file) |
| Chi phí | Miễn phí và có gói trả phí | Miễn phí và có gói trả phí | Miễn phí và có gói trả phí | Miễn phí (Dự án Google Cloud trả phí) | Miễn phí và có gói trả phí |
2. Các thuật ngữ chính trong GitHub

2.1. Repository trong GitHub
Repository hoạt động như một thư mục chứa tất cả file và folder của mã nguồn và tài nguyên của một dự án phần mềm cụ thể.

Repository có thể ở chế độ công khai (public - hiện thị công khai cho mọi người) hoặc riêng tư (private - giới hạn quyền truy cập cho chủ sở hữu).

2.2. Issue trong GitHub

Issue là một tính năng cho phép người dùng báo cáo sự cố, đề xuất các tính năng mới hoặc thảo luận về bất kỳ chủ đề nào liên quan đến dự án phần mềm.
Issue đóng vai trò như một nền tảng tập trung để liên lạc và cộng tác trong hệ thống repository của GitHub.
Các thành phần chính của issue bao gồm:
- Tiêu đề và Mô tả: Mỗi vấn đề thường có tiêu đề mô tả ngắn gọn issue hoặc chủ đề và mô tả chi tiết hơn để cung cấp bối cảnh và thông tin.
- Label: Label được sử dụng để phân loại issue. Chúng giúp phân loại vấn đề thành các danh mục khác nhau, chẳng hạn như bug, enhancement, documentation, ... Label giúp lọc và sắp xếp issue dễ dàng hơn.
- Assignees: Bạn có thể chỉ định một vấn đề cho một hoặc nhiều người cụ thể cùng chịu trách nhiệm giải quyết issue đó. Người được giao thường là thành viên nhóm hoặc người đóng góp.
- Comments: Các issue cho phép người dùng bình luận và thảo luận về issue hoặc chủ đề có liên quan. Cuộc hội thoại có thể bao gồm đoạn mã, ảnh chụp màn hình và thông tin bổ sung.
- Milestones: Các milestones được sử dụng để nhóm các vấn đề liên quan lại với nhau. Chúng giúp theo dõi tiến độ của một nhóm nhiệm vụ hoặc mục tiêu cụ thể.
- Thông báo: Người dùng có thể đăng ký các vấn đề để nhận thông báo về các cập nhật và nhận xét, đảm bảo họ luôn được thông tin về cuộc thảo luận.
- Tham chiếu và liên kết chéo: Bạn có thể tham chiếu các issue trong phần tin nhắn của commit, pull request và các issue khác bằng cách sử dụng ký hiệu
#theo sau là ID của issue. Liên kết chéo này giúp duy trì lịch sử theo dõi của các cuộc thảo luận và thay đổi mã.
2.3. Commit trong GitHub
Những thay đổi trong GitHub được gọi là commit. Mỗi commit đều có mô tả tại sao lại có sự thay đổi.

Ví dụ về commit
Commit nên có dạng: <type>: <description>. Bạn có thể đọc thêm Conventional Commits để hiểu best practice khi viết commit.
Ví dụ: Tính năng thêm API login. Commit sẽ có dạng feat: add api login.
2.4. Pull request (PR) trong GitHub
Pull request (còn gọi tắt là PR) là một yêu cầu để merge mã nguồn thay đổi từ một branch vào một branch khác. Đây được coi là trọng tâm của sự cộng tác trên GitHub, điều này cho phép các thành viên trong nhóm xem xét và thảo luận về sự thay đổi của mã nguồn.

Ví dụ về PR trong GitHub
Bạn có thể merge bất kỳ thay đổi nào vào branch đích chỉ bằng việc click nút "Merge pull request".

Ví dụ về Merge pull request
Sau khi PR đã được merge, bạn có thể xoá branch bằng cách click "Delete branch"

Ví dụ về Delete branch
2.5. Gist trong GitHub
GitHub cung cấp một tính năng rất hữu ích để tạo đoạn mã, văn bản hoặc thậm chí tài liệu markdown thông qua Gist.
Gist có thể được coi là một Git repository nhỏ có thể được fork hoặc clone. Khi bạn tạo gist, tài khoản của bạn sẽ chứa gist, đồng thời, bạn có thế nhìn thấy danh sách gist của mình ở trang chủ của Gist: https://gist.github.com/

Trang chủ của Gist
Gist có 2 loại là private và public. Loại private là người khác không thể thấy được gist của bạn trừ khi bạn chia sẻ đường link tới gist cho họ. Còn loại public thì ai cũng đều truy cập được nội dung gist của bạn.
2. Các tính năng của GitHub

Các tính năng của GitHub
- Kiểm soát phiên bản phân tán: GitHub được xây dựng xung quanh hệ thống kiểm soát phiên bản phân tán Git. GitHub cho phép bạn theo dõi các thay đổi trong cơ sở mã của mình, cộng tác với những người khác và quản lý các phiên bản khác nhau của dự án.
- Lưu trữ mã nguồn: GitHub cung cấp dịch vụ lưu trữ mã nguồn từ xa. Bạn có thể lưu trữ mã nguồn của mình trên máy chủ GitHub và truy cập từ bất kỳ đâu trên thế giới, miễn là nơi đó có kết nối Internet.
- Hợp tác: GitHub cung cấp các tính năng như pull request, code review và issue tracking để tạo điều kiện cho việc hợp tác giữa các nhà phát triển. Đồng thời, các nhà phát triển có thể cùng nhau làm việc trên cùng một dự án mà không sợ việc xảy ra xung đột. Ngoài ra, GitHub giúp việc cộng tác trở nên thú vị hơn khi bạn có thể thể đóng góp cho bất kỳ dự án mã nguồn mở nào.
- Kiểm soát truy cập: GitHub cung cấp khả năng kiểm soát truy cập chi tiết (fine-grained access control) thông qua các quyền và quy tắc bảo vệ branch. Do đó, bạn có thể kiểm soát quyền truy cập repository một cách dễ dàng.
- Quản lý project: GitHub tích hợp sẵn một issue tracker giúp bạn quản lý task, bug report và feature request. Bạn có thể chỉ định người xử lý issue, tạo và gán nhẵn cho issue, theo dõi issue và tạo tài liệu cho dự án với tính năng Wiki. Ngoài ra, tính năng tạo project and board cho phép bạn áp dụng các phương pháp quản lý nhóm khác nhau như Scrum hay Kanban.
- Tích hợp liên tục: Github tích hợp các công cụ CI/CD như GitHub Actions, Travis và Circle CI để tự động hoá việc building, testing và deploying mã nguồn.
- Github Pages: Github Pages lưu trữ các trang web tĩnh chứa mã nguồn trực tiếp từ repository GitHub của bạn.