Git
Hướng dẫn này dựa theo quy trình làm việc của AGL trong khi training và sau khi training.
Cơ bản về Git
Git là gì?
Git là hệ thống kiểm soát phiên bản của mã nguồn (Source Code).
Khi tham gia một dự án thực tế, bạn sẽ gặp nhiều kỹ sư cùng làm việc trong một dự án.
Vì vậy, để có thể làm việc một cách suôn sẻ, một hệ thống kiểm soát phiên bản như Git là cần thiết để đảm bảo không có xung đột mã giữa các kỹ sư.
Ngoài ra, các yêu cầu trong dự án thay đổi thường xuyên. Vì vậy, cần một hệ thống cho phép nhà phát triển quay lại phiên bản source code cũ hơn.
Cài đặt Git
Tham khảo ở đây: Cài đặt Git
Thế nào là repository, branch?
1. Repository là gì?
Repository hay còn gọi là Repo, dịch ra tiếng Việt có nghĩa là kho, đây chính là nơi chứa tất cả mã nguồn cho một dự án được tạo bởi Git. Bạn có thể hiểu một cách khác, Repository chính là nơi chứa dự án của bạn trên local hoặc remote. Một Repository sẽ có hai cấu trúc dữ liệu chính đó là Object store và Index được lưu trữ ẩn trong thư mục .git.
Đầu tiên, repository của Git được phân thành 2 loại là remote repository và local repository:
- Local repository: Là repository bố trí trên máy tính cá nhân, dành cho một người dùng sử dụng.
- Remote repository: Là repository để chia sẻ giữa nhiều người và bố trí trên server chuyên dụng.
Do repository phân thành 2 loại là local và remote nên với những công việc bình thường thì có thể sử dụng local repository và thực hiện trên máy cục bộ (local). Khi muốn công khai nội dung công việc mà bản thân đã làm trên local repository, thì sẽ upload lên remote repository rồi công khai. Thêm nữa, thông qua remote repository cũng có thể lấy về nội dung công việc của người khác.
2. Branch (nhánh) là gì?
Đối với những dự án có nhiều kỹ sư tham gia thì mỗi thành viên sẽ nhận được nhiều task từ leader, vì vậy việc xử lý những task này trên cùng một thời gian là rất khó vì dễ bị đụng code (ghi đè hoặc tải nhầm source code, v.v..).
Để giải quyết vấn đề này thì chúng ta sẽ sử dụng branch của Git, tương ứng với mỗi nhiệm vụ chúng ta sẽ tạo một branch và làm việc trên đó, các branch này sẽ hoạt động riêng lẻ và không ảnh hưởng lẫn nhau.
Vậy branch là những phân nhánh ghi lại luồng thay đổi của lịch sử, các hoạt động trên mỗi branch sẽ không ảnh hưởng lên các branch khác nên có thể tiến hành nhiều thay đổi đồng thời trên một repository giúp giải quyết nhiều nhiệm vụ cùng lúc.
Khi bạn tạo một repository thì Git sẽ thiết lập branch mặc định là master, nghĩa là nó sẽ tự tạo một branch master và mọi hoạt động của bạn lúc này đều nằm trên branch master.
Quy trình làm việc với Git
Ở tài liệu này chỉ hướng dẫn những lệnh Git thường dùng, các trường hợp nâng cao bạn có thể tìm thêm tài liệu bên ngoài.
Quy trình upload source lên git
Việc merge code vào nhánh chính (master) là công đoạn vô cùng quan trọng, nó sẽ ảnh hưởng rất lớn đến toàn bộ dự án.
Vì vậy, để việc quản lý code một cách trình tự và tối ưu, chúng ta phải tuân thủ theo quy trình như sau:
Trình tự xử lý:
- Push code lên nhánh đang làm việc.
- Vào git tạo pull request.
- Copy link pull request nhờ xác nhận từ mentor/khách.
- Xủ lý bug nếu có.
- Mentor/Khách duyệt pull request.
Nơi lưu trữ:
Trong quá trình training, hãy tuân thủ theo chuẩn lưu trữ code như sau:
Tạo nhánh riêng feature/.. và upload source lên đây.
- HTML: dùng trong thư mục
/mockupđặt source code vào thư mục này ==> feature/mockup. - WordPress: dùng trong thư mục
/wpđặt source code vào thư mục này ==> feature/wp.
Kiểm tra thông tin git
Ở bước này bạn chỉ cần làm một lần sau khi cài đặt git.
Khi bắt đầu dự án mới hoặc tham gia vào một dự án có sẵn, bạn hãy kiểm tra đã thiết lập thông về username và email ở local.
$ git config –global –list
Trường hợp nếu thông tin bị sai thì hãy thiết lập lại với lệnh như sau:
$ git config --global user.name "AGL"
$ git config --global user.email "staff@allgrow-labo.jp"
- user.name: tương ứng với tên trong Slack của bạn
- user.email: email mà công ty cấp cho bạn
--global được sử dụng để áp dụng cho tất cả các projects. Nếu bạn ko sử dụng --global thì settings sẽ chỉ dùng cho riêng project đó.
Tải repository
Để tải một repository về local, bạn hãy dùng lệnh:
$ git clone https://github.com/user/repository.git
Khi clone, git sẽ tự tạo 1 thư mục trùng tên với repository, bạn hãy chú ý nhé.
Phân nhánh (branch)
Hãy luôn kiểm tra nhánh trước khi bắt đầu công việc, vì nếu bất cẩn bạn có thể bị nhầm lẫn.
Đối với các nhánh khi làm việc với Git, hãy phân lại như sau:
Mặc định của git sẽ là nhánh master (main), đối với nhánh này bạn không thực hiện bất kỳ thao tác nào trên nó.
- Các task về tài liệu:
feature/docs - Các task về coding (html,css):
feature/coding - Các task sửa feedback:
issue/fix-bug - Các task về wordpress (theme):
feature/wordpress
Kiểm tra nhánh
$ git branch
Tạo nhánh mới
$ git branch <new_branch>
Chuyển nhánh
Sau khi tạo 1 nhánh mới và bạn muốn chuyển sang nhánh đó thì hãy dùng lênh:
$ git checkout <new_branch>
Có một cách để vừa tạo nhánh vừa chuyển sang nhánh mới trong 1 câu lệnh:
$ git checkout -b <new_branch>
Cập nhật thay đổi
Sau khi hoàn thành những chỉnh sửa hay những công việc trong ngày, bạn cần push chúng lên Git trước khi ra về.
$ git add .
Lệnh git add yêu cầu Git xác nhận các thay đổi của bạn, . mang nghĩa là tất cả files, folders.
$ git commit -m "nội dung"
Và tất nhiên phải ghi rõ 1 cách ngắn gọn nội dung bạn đã làm, để người khác khi đọc họ sẽ biết bạn đã làm những gì.
Tham khảo cách viết commit cho đúng: Commit Lint
Cập nhật lên Git
Hoàn thành việc commit, bước tiếp theo bạn cần phải đẩy (push) dữ liệu lên Git
$ git push
Và đó là bạn đã hoàn thành cơ bản của 1 quy trình khi làm việc với Git. Nhưng nó vẫn chưa kết thúc đâu nhé.
Chúng ta sẽ tiếp tục công việc vào ngày hôm sau, hãy thử suy nghĩ trường hợp một kỹ sư khác cũng đang làm chung một dự án trong lúc chúng ta kết thúc công việc của mình, sẽ thật rắc rối nếu chúng ta không thống nhất. Vì vậy hãy sử dụng git pull trước khi bắt đầu công việc mới trong dự án, để local của bạn có thể thấy được dữ liệu mới nhất nhé.
$ git pull
Hãy tập thói quen pull source code trước khi bắt đầu push gì đó lên.
Gộp nhánh
Leader hoặc manager sau khi kiểm tra source code, sẽ yêu cầu bạn gộp nhánh của mình vào nhánh chính.
Trước tiên, cần phải checkout ra khỏi branch hiện tại cần gộp để vào nhánh master (main)
$ git checkout master
Sau đó thì dùng lệnh merge để gộp branch mới vào master:
$ git merge <nhánh cần gộp>
Hãy chú ý nếu sự không đồng bộ giữa local và remote xảy ra, bạn sẽ gặp tình huống xung đột code (conflict).
Vì vậy phải kiểm tra code trước khi push code lên Git.