Git là gì?
Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS) rất được ưa chuộng, đượ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. Được tạo ra bởi Linus Torvalds vào năm 2005, Git đã nhanh chóng trở thành một trong những công cụ quản lý phiên bản phổ biến và quan trọng nhất trên toàn cầu.
Mục đích chính của Git là giúp đội ngũ phát triển làm việc cùng nhau trên cùng một dự án mà không gặp khó khăn về việc ghi đè lên công việc của nhau. Nó cho phép mọi người làm việc trên các phiên bản riêng của mã nguồn và sau đó hợp nhất các thay đổi này thành phiên bản chính thức, được gọi là “nhánh chính” (thường được gọi là “master” hoặc “main”).
Công dụng:
Tận dụng Git đem lại không ít lợi ích cho quá trình phát triển phần mềm và các dự án có nhiều người tham gia. Dưới đây là một số lý do cốt yếu mà Git được sử dụng rộng rãi:
- Version Control: Git giúp theo dõi thay đổi mã nguồn theo thời gian, cho phép quay trở lại phiên bản trước và hiểu lịch sử sửa đổi.
- Collaboration: Cho phép nhiều nhà phát triển cùng làm việc trên dự án, tạo nhánh riêng để xử lý tính năng hoặc lỗi, sau đó hợp nhất vào mã nguồn chính để phát triển đồng thời.
- Branching and Experimentation: Hệ thống nhánh (branch) của Git cho phép tạo các branch độc lập cho tính năng mới, bảo vệ mã nguồn chính. Nếu thành công, nhánh này có thể hợp nhất (merge) vào nhánh chính.
- Conflict Resolution: Git giúp giải quyết xung đột khi nhiều nhà phát triển cùng sửa mã nguồn. Công cụ của Git đảm bảo tích hợp thay đổi không xảy ra xung đột.
- Traceability: Git lưu lịch sử chi tiết thay đổi code, bao gồm tác giả, thời gian và lý do. Khả năng này hữu ích để hiểu lịch sử thay đổi code và khắc phục lỗi.
- Code Reviews: Nền tảng Git như GitHub và GitLab,… hỗ trợ code review. Lập trình viên có thể tạo các pull request , sau đó người khác review code, cải thiện chất lượng code và chia sẻ kiến thức.
- Rollbacks and Bug Fixes: Khi gặp lỗi hoặc thay đổi không mong muốn, Git cho phép quay trở lại phiên bản trước ổn định, giảm nguy cơ lỗi và tiết kiệm thời gian.
- Backup and Redundancy: Mỗi nhà phát triển có bản sao đầy đủ của mã nguồn, giảm rủi ro mất dữ liệu. Các bản sao được lưu ở git server.
- Offline Work: Git có tính phân tán, cho phép nhà phát triển làm việc ngoại tuyến, hỗ trợ nhóm làm việc từ xa hoặc phân tán.
- Open Source and Collaboration: Git là mã nguồn mở và được sử dụng rộng rãi. Nhiều dự án mã nguồn mở được lưu trữ trên các nền tảng như GitHub, giúp các nhà phát triển đóng góp và hợp tác trên các dự án khác nhau một cách dễ dàng.
- Scalability: Git có thể xử lý các dự án với các kích thước khác nhau, từ các dự án cá nhân nhỏ đến các dự án mã nguồn cấp doanh nghiệp lớn.
- Custom Workflows: Có thể tùy chỉnh workflow linh hoạt dựa trên git, tạo ra các branch, các release khác nhau theo nhu cầu cụ thể.
Các khái niệm liên quan:
Git Server là một máy chủ mà trên đó đã được cài đặt dịch vụ Git. Chức năng chính của máy chủ này là lưu trữ và quản lý mã nguồn từ các dự án khác nhau. Khi nhà phát triển làm việc trên dự án, họ có thể tương tác với máy chủ Git để tải lên, tải xuống và thực hiện các thao tác quản lý phiên bản trên mã nguồn. Máy chủ Git đóng vai trò quan trọng trong việc duy trì tích hợp và quản lý sự phát triển của dự án. Một số Git Server phổ biến và được sử dụng rộng rãi hiện nay, GitHub, GitLab, Bitbucket, Azure DevOps Services.
Repository là nơi chứa mã nguồn và thông tin liên quan đến sửa đổi và lịch sử dự án. Nó lưu trữ tất cả các tệp tin và thư mục liên quan đến dự án cùng với lịch sử thay đổi của chúng. Mỗi lần có sự thay đổi trong mã nguồn, repository ghi lại thông tin về thay đổi đó, bao gồm tác giả, thời gian và nội dung thay đổi. Điều này giúp theo dõi quá trình phát triển, phục hồi phiên bản trước và quản lý việc tích hợp mã từ nhiều nguồn khác nhau.
Repository có hai dạng:
- Remote Repository: Đặt trên máy chủ Git, có khả năng chia sẻ với nhiều người.
- Local Repository: Đặt trên máy cá nhân, dành riêng cho người dùng. Bạn có thể sao chép (clone) Remote Repository về tạo thành Local Repository. Khi có sửa đổi ở Local Repository, bạn có thể đẩy (push) mã lên Remote Repository.
Branch là một phần của repository, tương đương với khu vực làm việc độc lập. Khi tạo repository, một nhánh chính (master/main) sẽ được tạo sẵn. Nhánh này có thể chia thành nhiều nhánh con. Những thay đổi trên nhánh con không ảnh hưởng đến nhánh chính, cho phép làm nhiều sửa đổi trên cùng một kho chứa. Ta cũng có thể kết hợp (merge) các nhánh lại với nhau. Branch chia thành 2 loại, tương tự repository:
- Remote Branch: Lưu trên git server, có thể chia sẻ.
- Local branch: Lưu trên máy cá nhân, có thể liên kết với remote branch hoặc không.
Hoạt động:
Cơ chế hoạt động của Git dựa trên hệ thống quản lý phiên bản phân tán. Khi bạn làm việc với Git, quá trình hoạt động diễn ra như sau:
- Khởi tạo Repository: Bạn bắt đầu bằng cách khởi tạo một kho chứa (repository). Kho chứa này chứa mã nguồn và lịch sử thay đổi của dự án.
- Tạo Commits: Mỗi lần bạn thay đổi mã nguồn, bạn tạo một commit. Mỗi commit lưu trữ thay đổi cụ thể cùng với thông tin về tác giả, thời gian và mã băm duy nhất.
- Tạo và Quản lý Nhánh: Bạn có thể tạo nhiều nhánh để phát triển tính năng, sửa lỗi hoặc thử nghiệm mà không ảnh hưởng đến nhánh chính. Nhánh giúp bạn làm việc song song và tổ chức công việc.
- Merge và Rebase: Khi bạn hoàn thành công việc trên một nhánh, bạn có thể kết hợp (merge) hoặc sắp xếp lại (rebase) thay đổi từ một nhánh vào nhánh khác.
- Kết nối với Remote: Bạn có thể kết nối kho chứa của bạn với kho chứa từ xa như GitHub hoặc GitLab. Điều này giúp bạn chia sẻ và làm việc cùng nhau trên dự án.
- Push và Pull: Bằng cách sử dụng lệnh push, bạn có thể đẩy các commit từ kho chứa local lên kho chứa từ xa. Lệnh pull được sử dụng để đồng bộ hóa thay đổi từ kho chứa từ xa về kho chứa local.
- Giải Quyết Xung Đột: Khi có sự thay đổi xung đột, Git cung cấp các công cụ để bạn giải quyết và chọn cách hợp nhất các thay đổi một cách đúng đắn.
- Lịch Sử và Truy vết: Git theo dõi lịch sử toàn bộ quá trình thay đổi, cho phép bạn theo dõi sự phát triển của dự án và xem lại các thay đổi cụ thể. Cơ chế này cho phép các nhà phát triển làm việc hiệu quả, theo dõi quá trình phát triển và quản lý mã nguồn một cách linh hoạt.
Các lệnh Git cơ bản bạn cần biết
1. Khởi tạo một Repository Git
git init
Khởi tạo một kho chứa (repository) Git tạo ra một không gian lưu trữ để theo dõi và quản lý mã nguồn cùng với lịch sử thay đổi.
2. Clone một Repository sẵn có trong Git
Việc “sao chép một repository sẵn có” (clone a repository) tạo một bản sao hoàn chỉnh của kho chứa (repository) từ một nguồn gốc đã tồn tại, thường là từ các dịch vụ như GitHub, GitLab hoặc máy chủ Git cá nhân. Khi bạn thực hiện thao tác sao chép này, bạn tạo ra một bản nhân bản của tất cả dữ liệu trong kho chứa, bao gồm cả mã nguồn và lịch sử thay đổi.
git clone <URL của repository>
Ví dụ:
git clone https://github.com/username/repository.git
3. Tạo Branch trong Git
Trong quá trình làm việc với Git, bạn có thể tạo nhiều nhánh (branch) khác nhau để phát triển tính năng, sửa lỗi hoặc thử nghiệm. Dưới đây là các lệnh sử dụng để làm việc với nhánh:
Để kiểm tra nhánh hiện tại:
git branch
Để tạo một nhánh mới:
git branch <tên_nhánh>
Để chuyển đến một nhánh và tạo mới cùng một lúc:
git checkout -b <tên_nhánh>
4. Chuyển sang nhánh khác:
Trước khi bạn thay đổi mã nguồn, bước đầu tiên là chuyển sang một nhánh cụ thể. Để làm điều này, bạn sử dụng lệnh Git sau:
git checkout <tên_nhánh>
5. Áp dụng các thay đổi:
Sau khi bạn đã chỉnh sửa mã nguồn, thêm, sửa hoặc xóa tệp, bạn cần cập nhật chúng vào branch của bạn. Để thêm tất cả các tệp ta dùng lệnh sau:
git add .
Sau khi sử dụng lệnh “add”, bạn cần thực hiện lệnh “commit” để đưa thông tin về các thay đổi lên Kho chứa Cục bộ (Local Repository):
git commit -m “Comment”
6. Đồng bộ lên máy chủ (Git Server):
Sau khi thực hiện lệnh “Commit”, thông tin mới chỉ được lưu trữ trên Kho chứa Cục bộ (Local Repository). Để đồng bộ thông tin lên máy chủ, bạn cần sử dụng lệnh “push”:
git push origin <tên_nhánh>
Pull data từ Remote Repository:
git pull origin master
Lệnh trên sẽ hợp nhất các thay đổi mới từ máy chủ từ xa vào nhánh hiện tại trên máy cục bộ của bạn.
7. Kết hợp nhánh:
Sau khi đã thực hiện cập nhật tệp và đẩy chúng lên Git trên một nhánh mới, bước tiếp theo là kết hợp (merge) mã nguồn trở lại vào nhánh chính (master). Để làm điều này, bạn cần chuyển ra khỏi nhánh hiện tại và chuyển sang nhánh master, sau đó sử dụng lệnh merge để kết hợp nhánh mới vào master:
git checkout master
git merge <nhánh_mới>
8. Xem lịch sử commit:
git log
Lệnh “git log” sẽ cung cấp thông tin về người thực hiện commit, thời gian, và thông điệp của các lần commit.
(https://200lab.io/blog/git-la-gi/)