Git và GitHub: khác nhau thế nào và liên hệ ra sao
Git là phần mềm quản lý phiên bản chạy trên máy tính, lưu lịch sử thay đổi của dự án. GitHub là dịch vụ web lưu kho Git trên đám mây, cộng thêm công cụ làm việc nhóm: pull request, review code, quản lý công việc, CI. Có thể dùng Git mà không cần GitHub, còn GitHub thì không thể không có Git.
Git và GitHub thường bị nhầm lẫn, dù chúng thuộc hai tầng khác nhau. Git là phần mềm quản lý phiên bản, bạn cài lên máy tính: nó ghi nhớ từng trạng thái đã lưu của dự án và cho phép quay lại. GitHub là dịch vụ web lưu các bản sao kho Git và xây quanh chúng các công cụ làm việc nhóm. Cách dễ nhớ nhất: Git là động cơ, còn GitHub là một xưởng dịch vụ có chỗ để đặt động cơ đó.
Git là gì
Git là hệ thống quản lý phiên bản phân tán. Linus Torvalds tạo ra nó năm 2005 để phát triển nhân Linux, và từ đó nó trở thành tiêu chuẩn của ngành. Git hoạt động hoàn toàn cục bộ: lịch sử thay đổi nằm trong thư mục ẩn .git bên trong dự án, và phần lớn thao tác không cần internet.
Từ khóa quan trọng là «phân tán». Mỗi thành viên dự án có trên máy một bản sao đầy đủ của kho lưu trữ với toàn bộ lịch sử, chứ không chỉ các tệp mới nhất. Nếu máy chủ hỏng, dự án có thể được khôi phục từ bất kỳ máy làm việc nào.
Git tự mình làm được những việc sau:
- ghi lại thay đổi bằng commit — ảnh chụp dự án kèm tác giả, thời gian và mô tả;
- cho biết ai, khi nào và vì sao đã thay đổi một dòng cụ thể (
git log,git blame); - phát triển song song trong các nhánh và gộp chúng lại;
- hoàn tác lỗi mà không làm mất phần công việc còn lại;
- trao đổi lịch sử với kho khác qua
git push,git pullvàgit fetch.
Git là công cụ dòng lệnh. Các ứng dụng đồ họa và bảng Git tích hợp trong trình soạn thảo (VS Code, IntelliJ IDEA) chỉ là lớp vỏ bên ngoài cùng những lệnh đó.
GitHub là gì
GitHub là nền tảng đám mây để lưu kho Git, hiện thuộc Microsoft. Bạn tạo kho ở đó, đưa mã từ máy mình lên bằng git push, và mã đó trở nên khả dụng với đồng nghiệp, nhà tuyển dụng, hoặc cả internet nếu kho là công khai.
Giá trị của GitHub không chỉ nằm ở việc lưu trữ. Xung quanh kho, GitHub bổ sung những thứ mà bản thân Git không có:
- Pull request — yêu cầu gộp một nhánh, kèm thảo luận và review code theo từng dòng;
- Issues — công việc và báo lỗi gắn với dự án;
- GitHub Actions — CI/CD: tự động chạy test, build và deploy mỗi lần push;
- quản lý quyền truy cập — ai được đọc, ghi, gộp vào nhánh được bảo vệ;
- hồ sơ lập trình viên — biểu đồ hoạt động và dự án công khai mà nhà tuyển dụng hay xem;
- GitHub Pages — hosting miễn phí cho website tĩnh ngay từ kho.
Các từ khóa như «git com» hay «git hub» thường chỉ đến dịch vụ này — địa chỉ github.com. Trang chính thức của chính Git là git-scm.com, từ đó người ta tải bộ cài đặt.
Git và GitHub: so sánh trong bảng
| Tiêu chí | Git | GitHub |
|---|---|---|
| Đó là gì | Phần mềm quản lý phiên bản | Dịch vụ web lưu trữ kho |
| Chạy ở đâu | Trên máy của bạn | Trên đám mây, qua trình duyệt và API |
| Có cần internet không | Không, trừ khi trao đổi với kho từ xa | Có |
| Giấy phép | Mã nguồn mở (GPLv2), miễn phí | Dịch vụ độc quyền, có gói miễn phí và gói trả phí |
| Giao diện | Dòng lệnh, các ứng dụng GUI | Trang web, ứng dụng GitHub Desktop, CLI gh |
| Nhiệm vụ chính | Lịch sử phiên bản, nhánh, gộp | Làm việc nhóm, review, CI, chia sẻ mã |
| Có thể dùng riêng không | Có, hoàn toàn | Không, GitHub được xây trên Git |
Git và GitHub hoạt động cùng nhau thế nào
Liên kết giữa hai thứ là remote — kho từ xa. Kho cục bộ lưu địa chỉ kho trên GitHub dưới một tên ngắn, mặc định là origin. Việc trao đổi sau đó diễn ra qua ba lệnh:
git push— gửi các commit mới của bạn lên máy chủ;git fetch— tải commit của người khác về, nhưng không đụng tới tệp của bạn;git pull— tải về và gộp ngay vào nhánh hiện tại (tức làfetch+mergehoặcrebase).
Điều quan trọng: GitHub không thấy mã của bạn cho đến khi bạn gửi nó. Commit chỉ tồn tại cục bộ cho tới lần git push đầu tiên. Đây là lỗi phổ biến của người mới: «em đã commit mà trên GitHub không có gì».
Đường đi điển hình: từ dự án cục bộ lên GitHub
# 1. Tạo kho cục bộ
cd my-project
git init
git add .
git commit -m "Commit đầu tiên"
# 2. Tạo kho rỗng trên github.com (không có README),
# sao chép địa chỉ và thêm làm remote
git remote add origin git@github.com:username/my-project.git
# 3. Đổi tên nhánh thành main và gửi lên
git branch -M main
git push -u origin main
Cờ -u (dạng đầy đủ --set-upstream) liên kết nhánh main cục bộ với nhánh từ xa. Sau đó chỉ cần gõ git push và git pull mà không cần tham số.
Đường ngược lại: bắt đầu từ kho trên GitHub
Nếu dự án đã có trên GitHub, bạn không tạo lại từ đầu mà clone về:
git clone https://github.com/username/my-project.git
cd my-project
Lệnh sẽ tải toàn bộ lịch sử và tự cấu hình remote origin.
Xác thực: SSH hoặc HTTPS
Từ năm 2021, GitHub không chấp nhận mật khẩu tài khoản khi làm việc với Git qua HTTPS. Có hai cách hoạt động được.
HTTPS + Personal Access Token. Token được tạo trong cài đặt tài khoản (Settings → Developer settings) và nhập thay cho mật khẩu. Để không phải nhập mỗi lần, Git dùng trình quản lý thông tin đăng nhập — trên Windows, nó đi kèm Git cho Windows.
Khóa SSH. Đây là cách mà nhà tuyển dụng thường kỳ vọng bạn tự cấu hình được:
# Tạo khóa
ssh-keygen -t ed25519 -C "ban@example.com"
# In phần công khai và thêm vào GitHub:
# Settings → SSH and GPG keys → New SSH key
cat ~/.ssh/id_ed25519.pub
# Kiểm tra kết nối
ssh -T git@github.com
Nếu thành công, GitHub chào bạn bằng tên đăng nhập và thông báo rằng không cấp quyền truy cập shell — điều này là bình thường. Khi đó địa chỉ kho phải dùng dạng git@github.com:user/repo.git, không phải https://.
Nếu kho đã được kết nối qua HTTPS, có thể chuyển sang SSH bằng một lệnh:
git remote set-url origin git@github.com:username/my-project.git
GitHub, GitLab và các dịch vụ khác: khác nhau ở đâu
GitHub không phải là hosting Git duy nhất. Tất cả đều dùng cùng một Git, nên kho có thể chuyển từ dịch vụ này sang dịch vụ khác mà không mất lịch sử. Khác biệt nằm ở bộ công cụ xung quanh mã.
| Dịch vụ | Đặc điểm | Khi nào chọn |
|---|---|---|
| GitHub | Cộng đồng mã nguồn mở lớn nhất, GitHub Actions, Copilot | Portfolio, dự án mở, phần lớn các startup |
| GitLab | CI/CD tích hợp sẵn, có thể tự triển khai trên máy chủ riêng (self-hosted) | Doanh nghiệp cần mã nằm trong hạ tầng riêng |
| Bitbucket | Tích hợp với Jira và các sản phẩm Atlassian | Nhóm làm việc trong hệ sinh thái Atlassian |
| Gitea, Forgejo | Giải pháp self-hosted nhẹ, mã nguồn mở | Nhóm nhỏ, máy chủ tại nhà |
Trên GitLab yêu cầu gộp được gọi là merge request, trên GitHub là pull request, nhưng bản chất giống nhau: đề xuất thay đổi từ một nhánh và thảo luận trước khi gộp. Thuật ngữ khác nhau, còn các lệnh Git thì giống hệt.
Một kho cục bộ có thể có nhiều remote cùng lúc, ví dụ để đồng bộ dự án lên cả GitHub và GitLab:
git remote add gitlab git@gitlab.com:username/my-project.git
git push gitlab main
git remote -v
Có cần GitHub khi làm việc một mình không
Về kỹ thuật thì không cần: Git hoạt động rất tốt cục bộ. Nhưng ngay cả với dự án cá nhân, kho từ xa cũng mang lại ba lợi ích lớn:
- Bản sao lưu. Laptop hỏng — mã và toàn bộ lịch sử vẫn còn trên máy chủ.
- Làm việc trên nhiều thiết bị. Ở nhà và ở văn phòng, bạn đồng bộ qua
pushvàpull. - Portfolio. Khi tuyển vị trí junior, hồ sơ GitHub thường được xem trước cả CV: có dự án thật không, commit có thông điệp rõ ràng không, có README không.
Người mới nên bắt đầu từ đâu
Không nên học Git và GitHub cùng lúc — thứ tự rất quan trọng. Trước hết hãy nắm vững vòng làm việc cục bộ: git init, git status, git add, git commit, git log, nhánh và gộp. Khi đã làm được mà không cần gợi ý, hãy đăng ký GitHub, cấu hình SSH và học push, pull, fetch. Bước cuối là quy trình làm việc nhóm: fork, nhánh cho từng công việc, pull request, review.
Nhà tuyển dụng nhìn gì trong GitHub của bạn
Các ô xanh thể hiện hoạt động không phải là điều quan trọng nhất. Người review có kinh nghiệm đánh giá những điều khác trong vài phút:
- thông điệp commit dễ hiểu thay vì «fix», «123», «sửa lung tung»;
- các commit nhỏ, hợp lý thay vì một commit khổng lồ kiểu «tải dự án lên»;
- README mô tả cách chạy dự án;
- tệp
.gitignore: kho không cónode_modules,.envchứa mật khẩu, tệp cấu hình IDE; - nhánh và pull request ngay cả trong dự án học tập — điều này cho thấy bạn quen với quy trình nhóm.
Lỗi thường gặp của người mới
«fatal: not a git repository»
Bạn chạy lệnh Git bên ngoài một kho. Hãy chuyển vào thư mục dự án hoặc chạy git init. Việc đăng ký GitHub không liên quan gì ở đây — đây là lỗi cục bộ của Git.
«Permission denied (publickey)»
Khóa SSH chưa được tạo, chưa thêm lên GitHub hoặc chưa được nạp vào ssh-agent. Kiểm tra bằng ssh -T git@github.com và danh sách khóa trong cài đặt tài khoản.
«rejected … (fetch first)» khi push
Trên máy chủ có commit mà bạn chưa có — ví dụ bạn tạo kho trên GitHub với README. Hãy lấy thay đổi về trước: git pull --rebase origin main, sau đó chạy lại git push. Đừng dùng --force khi chưa hiểu công việc của ai sẽ bị ghi đè.
Bí mật trong kho công khai
Mật khẩu hoặc API key đã từng nằm trong commit sẽ vẫn còn trong lịch sử, dù sau đó tệp đã bị xóa. Khóa đó cần được cấp lại ngay, còn .env nên được thêm vào .gitignore từ trước.
Tóm lại
Git là công cụ quản lý phiên bản trên máy bạn, còn GitHub là dịch vụ nơi các kho đó được lưu trên đám mây và nơi làm việc nhóm được xây dựng xung quanh chúng. GitLab, Bitbucket và các dịch vụ khác là lựa chọn thay thế cho GitHub, chứ không phải thay thế cho Git: bên dưới đều là cùng các commit, nhánh và lệnh. Hãy bắt đầu với Git cục bộ, sau đó thêm remote và cấu hình SSH. Liên kết kho cục bộ với GitHub, push, pull và fetch được hướng dẫn thực hành trong khóa học Git.
Câu hỏi thường gặp
GitHub có miễn phí không?
Có, gói miễn phí cho phép tạo số lượng kho công khai và riêng tư không giới hạn. Các gói trả phí bổ sung tính năng nâng cao cho nhóm và nhiều phút hơn cho GitHub Actions với dự án riêng tư.
Có thể dùng GitHub mà không dùng dòng lệnh không?
Có, qua GitHub Desktop hoặc các bảng Git tích hợp trong trình soạn thảo. Nhưng các công cụ đó gọi cùng các lệnh Git, và hiểu chúng vẫn hữu ích, đặc biệt khi xử lý xung đột.
Đã có tài khoản GitHub thì có cần cài Git không?
Có. Tài khoản cung cấp chỗ lưu trữ, còn làm việc với mã trên máy — commit, nhánh, push — bạn thực hiện qua Git đã cài.
Làm sao chuyển kho từ GitHub sang GitLab?
Thêm remote mới và đẩy toàn bộ nhánh và thẻ: git push gitlab --all và git push gitlab --tags. Lịch sử được chuyển đầy đủ vì cả hai dịch vụ đều chạy trên Git.
Kho công khai khác kho riêng tư ở điểm nào?
Kho công khai ai trên internet cũng xem được, còn kho riêng tư chỉ bạn và những người được mời mới thấy. Để làm portfolio, bạn cần kho công khai.
Chủ đề này được giảng chi tiết kèm thực hành trong khóa học “Git с нуля до уверенного разработчика”.
- Зачем вообще нужен Git — и почему без него не берут на работу
- GitHub и удалённые репозитории: ваш код в облаке