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ỏ.
Đọc thêm: Git là gì? Tổng quan về Git cơ bản cho lập trình viên
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.
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.
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".
Sau khi PR đã được merge, bạn có thể xoá branch bằng cách click "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/
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
- 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.
3. Vì sao nên sử dụng GitHub?
- Sử dụng phổ biến: Trong số các Github Server thì GitHub được coi là nền tảng phổ biến nhất và được ưa thích nhất với 4 triệu tổ chức và hơn 100 triệu nhà phát triển. Lý do ngoài việc sử dụng dễ dàng thì còn vì những tính năng như lưu trữ mã nguồn miễn phí, kiểm soát phiên bản phân tán, tạo project và tích hợp các nền tảng CI/CD phổ biến như Travis CI và Jenkins.
- Cộng đồng đông đảo: GitHub có một cộng đồng các nhà phát triển lớn mạnh và năng động, khiến nó trở thành một nơi tuyệt vời để khám phá và đóng góp cho các dự án nguồn mở.
- Bảo mật: Github cung cấp các tính năng như quét mã nguồn và phân tích dependency, giúp cải thiện tính bảo mật của mã nguồn.
- Lưu trữ mã: GitHub cung cấp nền tảng để lưu trữ mã nguồn của bạn và cộng đồng nhà phát triển toàn cầu có thể truy cập được chúng một cách dễ dàng.
- Hợp tác: Github tạo điều kiện cho sự hợp tác giữa các nhà phát triển bằng cách cho phép nhiều người có thể đồng thời đóng góp trên cùng một dự án.
4. Nhược điểm của GitHub
- Mất phí cho các private repository: Mặc dù GitHub cung cấp các public repository miễn phí, nhưng các kho lưu trữ riêng tư có thể phải chịu chi phí, đây có thể là một hạn chế đối với một số người dùng hoặc tổ chức.
- Phụ thuộc vào dịch vụ tập trung: Do GitHub là một nền tảng tập trung, nên nếu có sự cố xảy ra với dịch vụ của GitHub thì công việc của bạn cũng sẽ bị ảnh hưởng.
- Đường cong học tập: Mặc dù bản thân GitHub là một công cụ rất dễ sử dụng nhưng Git thì lại không dễ học với người dùng mới. Việc hiểu các khái niệm và lệnh Git có thể mất thời gian.
- Giới hạn kích thước file: GitHub có những hạn chế về kích thước từng file và tổng kích thước của repository, đây có thể là một vấn đề đối với các dự án lớn.
5. Cách sử dụng GitHub
5.1. Cách sử dụng các tính năng chính của Github
Bước 1: Tạo một tài khoản GitHub
Nếu bạn chưa có tài khoản, hãy truy cập trang chủ của GitHub và đăng ký tài khoản miễn phí. Sau khi nhập email và password, Github sẽ gửi cho bạn một email xác minh. Bạn cần mở email và click vào đường dẫn xác minh trong email để xác nhận địa chỉ email của bạn.
Sau khi tài khoản của bạn được xác minh, bạn có thể khám phá GitHub bằng cách trải nghiệm các tính năng của Github như duyệt qua các repository và các dự án công khai để hiểu những gì có sẵn.
Bước 2: Cài đặt và cấu hình Git
Nếu máy bạn chưa cài Git, bạn có thể làm theo hướng dẫn cài đặt Git và chọn cách phù hợp với hệ điều hành trên máy tính của bạn.
Để kiểm tra, phiên bản Git bạn đã cài, bạn cần chạy lệnh
Để thay đổi cấu hình Git, bạn cần thêm (nếu chưa có) hoặc sửa file .gitconfig
ở root folder của máy bạn.
# Đi tới root folder
cd ~
# tạo file nếu chưa có
touch .gitconfig
Bước 3: Làm việc với repository
- Tạo mới repository
Khi tạo mới repository, bạn cần phải đặt tên không trùng với tên của repository nào đã có trong danh sách repository của bạn và thêm mô tả cho repository.
Mặc định, GitHub sẽ tạo repository công khai. Bạn có thể sửa chế độ của repository trước lúc tạo hoặc sau khi tạo thành công.
- Clone một repository
Để bắt đầu làm việc trên một dự án hiện có, tạo ra một bản copy repository có sẵn trên GitHub bằng cách clone repository về máy cục bộ của bạn bằng Git.
Khi clone một repository, bạn sao chép tất cả các file của nó, lịch sử commit và toàn bộ branch vào máy cục bộ của mình.
git clone <URL>
- Fork một repository
Fork cũng là copy repository của người khác nhưng khác clone ở chỗ fork tạo ra một repository mới chứa tất cả mã nguồn của repository gốc và repository mới thuộc sở hữu của bạn.
Việc fork thường được thực hiện thông qua giao diện người dùng của GitHub bằng cách click vào nút "Fork" trên trang của repository.
Sau khi fork, bạn có thể clone repository đã fork của mình về máy cục bộ để thực hiện các thay đổi, sau đó tạo Pull Request (PR) để đề xuất các thay đổi được thêm vào repository ban đầu.
- Tạo sự thay đổi cho repository và thêm commit
git add <tên_file> # hoặc `git add .` để thêm tất cả file
git commit -m <mô tả commit của bạn>
- Push thay đổi lên GitHub
git push origin <tên_branch>
- Tạo pull request (nếu cần)
Nếu bạn làm việc trên một nhánh riêng và muốn đưa các thay đổi của mình vào nhánh chính (chẳng hạn như main
hoặc master
), bạn có thể tạo một Pull Request trên GitHub. Pull Request giúp gửi đề xuất thay đổi tới chủ sở hữu repository gốc và cho phép họ xem xét và chấp nhận các thay đổi của bạn
Bạn có thể chỉ định một hoặc nhiều người đánh giá cho PR của mình. Người đánh giá thường là thành viên nhóm có chuyên môn về dự án hoặc lĩnh vực có mã nguồn cụ thể đang được sửa đổi.
- Review code
Người đánh giá kiểm tra các thay đổi mã nguồn một cách kỹ lưỡng. Họ có thể sử dụng giao diện GitHub để xem chúng, để lại nhận xét và đề xuất sửa đổi. Dưới đây là một số khía cạnh cần xem xét trong quá trình review code:
- Chất lượng mã nguồn: Đảm bảo rằng mã tuân theo các tiêu chuẩn mã hóa, được tổ chức tốt và tuân thủ các phương pháp hay nhất.
- Chức năng: Xác minh rằng các thay đổi mã nguồn hoàn thành chức năng kỳ vọng hoặc khắc phục sự cố được báo cáo.
- Edge case: Kiểm tra xem có tồn tại edge case không và lỗi có được giải quyết phù hợp chưa.
- Hiệu suất: Đánh giá tác động của những thay đổi đối với hiệu suất hệ thống.
- Bảo mật: Tìm kiếm các lỗ hổng bảo mật tiềm ẩn hoặc phần mã có thể khiến hệ thống gặp rủi ro.
- Rõ ràng và dễ đọc: Đảm bảo rằng tên biến, nhận xét và tài liệu viết rõ ràng và dễ hiểu.
- Merge pull request
Nếu vượt qua quá trình review, PR sẽ được merge.
5.2. Quản lý project với GitHub
Đối với một team nhỏ vận hành theo phương pháp Scrum hoặc Kanban, bạn hoàn toàn có thể quản lý project với tính năng Project của GitHub mà không cần phải dùng tới những nền tảng riêng biệt khác như Jira, Clickup hay Trello.
Các bước thực hiện rất đơn giản như sau:
Bước 1: Tạo project
- Click vào tab Projects.
- Click New project để tạo project mới. Bạn có thể tự tạo project từ scratch hoặc sử dụng template sẵn có của hệ thống.
Bước 2: Thêm các item cho project và kéo chúng vào các cột phù hợp
6. GitHub Copilot là gì?
6.1. Giới thiệu về GitHub Copilot
GitHub Copilot là một công cụ trí tuệ nhân tạo được phát triển bởi GitHub và OpenAI, được tích hợp sẵn trong các IDE như Visual Studio Code, Visual Studio, Neovim và JetBrains, giúp người dùng tự động tạo mã nguồn dựa trên yêu cầu.
Hiện tại, bạn có thể trải nghiệm miễn phí GitHub Copilot tối đa 30 ngày. Sau đó, nếu muốn tiếp tục sử dụng, bạn sẽ phải trả mức phí theo tháng là 10 đô (~240.000 đồng) hoặc theo năm là $100 (~2.4 triệu đồng).
GitHub Copilot được hỗ trợ bởi mô hình học máy có tên GPT-3.5, đây là một biến thể của mô hình GPT-3 do OpenAI tạo ra. GPT-3.5 được đào tạo về một lượng lớn mã từ kho lưu trữ nguồn mở, tài liệu lập trình và các nguồn liên quan đến mã khác. Hiện tại, GPT-3.5 cũng là model được OpenAI sử dụng cho ChatGPT.
Đọc thêm: ChatGPT là gì? Cách sử dụng ChatGPT an toàn & hiệu quả
6.2. Tính năng của GitHub Copilot
Một vài tính năng điển hình của Copilot bao gồm:
- Tích hợp với trình soạn thảo mã: GitHub Copilot tích hợp hoàn hảo với các trình soạn thảo mã phổ biến như Visual Studio Code (VS Code), Visual Studio, Neovim và JetBrains. Khi bạn cài đặt tiện ích mở rộng GitHub Copilot trong trình chỉnh sửa mã của mình, nó sẽ trở thành một trợ lý mã hóa tích cực cung cấp các đề xuất và viết mã theo thời gian thực.
- Tương tác bằng ngôn ngữ tự nhiên: Không chỉ có vậy, các nhà phát triển có thể tương tác với Copilot bằng ngôn ngữ tự nhiên. Họ có thể viết comment cho mã hoặc một phần mã và Copilot sẽ phân tích ngữ cảnh cũng như đưa ra các đề xuất và viết mã có liên quan dựa trên mã xung quanh cũng như mục đích của nhà phát triển.
- Gợi ý viết mã: Khi bạn nhập, GitHub Copilot cung cấp các đề xuất để hoàn thành từng dòng mã, thậm chí tạo toàn bộ function hoặc class. Nó xem xét đến các phương pháp tốt nhất, code style và bối cảnh.
- Hỗ trợ nhiều ngôn ngữ: Copilot hỗ trợ nhiều ngôn ngữ lập trình, framework và thư viện. Nó có thể hỗ trợ các nhà phát triển trong các mô hình lập trình khác nhau, từ phát triển web đến học máy.
- Trợ giúp code review: Copilot có thể hỗ trợ đánh giá mã bằng cách đề xuất cải tiến, chỉ ra các vấn đề tiềm ẩn và đưa ra các giải pháp thay thế.
7. GitHub Actions là gì?
GitHub Actions là là một dịch vụ tích hợp liên tục (Continuous Integration - CI) và triển khai liên tục (Continuous Deployment - CD) được cung cấp bởi GitHub.
Nó cho phép bạn tự động hóa quy trình phát triển phần mềm của mình bằng cách tạo các luồng làm việc tự động được gọi là "workflow". GitHub Actions giúp bạn xây dựng, kiểm tra, và triển khai mã nguồn một cách liên tục và có thể tích hợp nhiều công cụ và dịch vụ khác nhau vào quy trình làm việc của bạn.
Dưới đây là một số điểm quan trọng về GitHub Actions:
- Workflows: Workflows trong GitHub Actions là các luồng công việc tự động hóa mà bạn xác định. Mỗi workflow bao gồm một loạt các bước (steps) cần được thực hiện. Ví dụ, một workflow có thể bao gồm các bước như kiểm tra mã nguồn, xây dựng ứng dụng, và triển khai lên môi trường sản phẩm.
- Sự kiện (Events): Workflows có thể được kích hoạt bởi các sự kiện trên GitHub như khi có sự thay đổi trong repository, khi có sự kiện gửi Pull Request, hoặc theo một lịch trình cụ thể.
- YAML Configuration: Cấu hình của mỗi workflow được xác định bằng một tệp YAML, nơi bạn định rõ các bước, sự kiện kích hoạt, và các thiết lập khác.
- Tích hợp công cụ và dịch vụ: GitHub Actions có thể tích hợp với nhiều công cụ và dịch vụ khác nhau như Docker, Node.js, AWS, Google Cloud, và nhiều dịch vụ CI/CD khác. Điều này giúp bạn tạo quy trình làm việc phức tạp và linh hoạt.
- Xây dựng và kiểm tra: GitHub Actions cho phép bạn tự động xây dựng (build) mã nguồn của mình và thực hiện kiểm tra tự động (automated testing) để đảm bảo chất lượng mã.
- Triển khai liên tục: Bạn có thể sử dụng GitHub Actions để tự động triển khai mã nguồn lên các môi trường khác nhau, bao gồm môi trường developement, staging và product.
- Thông báo và báo cáo: GitHub Actions cung cấp các công cụ để thông báo kết quả của các quy trình tự động và tạo báo cáo chi tiết về quá trình làm việc.
- Biến môi trường: GitHub Actions cho phép bạn sử dụng biến môi trường (environment secrets) để bảo vệ thông tin nhạy cảm như API key và access secret.
8. GitHub Enterprise
GitHub Enterprise là phiên bản có tính năng tương tự GitHub, cho phép người dùng tự quản lý Github trên máy chủ của mình hoặc trên GitHub cloud.
Vào tháng 11 năm 2020, mã nguồn của GitHub Enterprise Server đã bị rò rỉ trực tuyến trong một cuộc biểu tình chống lại việc DMCA gỡ bỏ youtube-dl. youtube-dl là trình quản lý download tài nguyên mã nguồn mở miễn phí đối với video và audio từ Youtube và hơn 1000 trang web lưu trữ video khác.
Theo GitHub, mã nguồn xuất phát từ việc GitHub vô tình chia sẻ mã nguồn với chính khách hàng Enterprise chứ không phải từ một cuộc tấn công vào máy chủ GitHub.
Tài liệu tham khảo
9. Tổng kết về GitHub
GitHub là một nền tảng mạnh mẽ giúp đơn giản hóa việc cộng tác, hợp lý hóa việc kiểm soát phiên bản và thúc đẩy cộng đồng các nhà phát triển toàn cầu.
Bằng cách hiểu GitHub là gì, các thuật ngữ chính trong GitHub, tính năng GitHub cung cấp và cách sử dụng GitHub, bạn có thể khai thác tiềm năng của nó để cải thiện quy trình phát triển phần mềm của mình và đóng góp cho cộng đồng.
Bạn hãy thường xuyên theo dõi các bài viết hay về Lập Trình & Dữ Liệu trên 200Lab Blog nhé. Cũng đừng bỏ qua những khoá học Lập Trình tuyệt vời trên 200Lab nè.
Một vài bài viết mới bạn sẽ thích:
Git là gì? Tổng quan về Git cơ bản cho lập trình viên
Git là gì? Tổng quan về Git cơ bản cho lập trình viên
Bitbucket là gì? GitHub là gì? So sánh Bitbucket và GitHub
Cách giải quyết lỗi password authentication Github