Git Basics – Các câu lệnh Git cơ bản • TESTING VN

Git là gì?

☘ Git là một hệ thống quản lý phiên bản phân tán (distributed version control) mã nguồn mở và miễn phí, được thiết kế để xử lý mọi thứ từ các dự án nhỏ đến dự án rất lớn nhanh chóng và hiệu quả.

Nguyên gốc định nghĩa trên trang git

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Nguồn: https://git-scm.com/

Git, GitHub, và GitLab

Nhiều người bị nhầm lẫn giữa 3 từ này. Sau khi đọc bài này thì bạn sẽ thôi ý nghĩ rằng 3 từ này có mối liên hệ với nhau nhé. Trước tiên hãy xem qua lời giới thiệu GitHub và GitLab bên dưới nha.

(Công ty) GitHub là một dịch vụ lưu trữ trên internet để phát triển và quản lý phiên bản phần mềm sử dụng Git. GitHub cung cấp khả năng kiểm soát phiên bản phân tán sử dụng Git, giúp kiểm soát truy cập, theo dõi và quản lý lỗi, yêu cầu tính năng mới, quản lý task, tích hợp liên tục (CI – continuous integration) và wiki (quản lý tài liệu) cho mọi dự án. Trụ sở chính của GitHub ở California, từ 2018 nó trở thành một trong những công ty con của Microsoft. Nó được sử dụng rộng rãi để lưu trữ các dự án phát triển phần mềm mã nguồn mở (open source projects)

Nguồn: https://en.wikipedia.org/wiki/GitHub

(Công ty) GitLab là một công ty lõi-mở (open-core company) cung cấp GitLab, một gói phần mềm DevOps kết hợp khả năng phát triển, bảo mật, và vận hành phần mềm trong một ứng dụng duy nhất. Đây là một dự án phần mềm nguồn mở được tạo ra bởi một lập trình viên người Ukraina, Dmitriy Zaporozhets và một lập trình viên người Hà Lan, Sytse Sijbrandij.

Nguồn: https://en.wikipedia.org/wiki/GitLab

Như vậy, bạn có thể thấy Git, GitHub, và GitLab không có mối liên hệ gì với nhau. Chẳng qua là một cái tên có cùng chữ “git”

Gitllow cơ bản

Hình bên dưới mô tả tổng quát cách quản lý source code (mã nguồn)

Nguồn: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow

  • Main: nhánh code chính (thường gọi là nhánh Main hoặc Master). Thường nó là code ổn định và mới nhất. Tuy nhiên có nhiều công ty sử dụng nhánh Snapshot làm mới nhất, và Main/Master là nhánh ổn định nhất, đang sử dụng trên production.
  • Develop: nhánh code mà lập trình viên (developer) đang làm việc trên đó. Nó được “rẽ nhánh” từ nhánh main. Ngay tại thời điểm nó rẽ nhánh, thì mọi thứ mới nhất và ổn định.
  • Feature: là một nhánh code khác được tách riêng từ nhánh Develop. Thường là để làm việc trên một task riêng nào đó liên quan. Thường trong thực tế, khi bắt đầu làm việc trên một sub-task thì mọi người hay tách riêng từ nhánh Develop (code chung của một task nào đó). Sau khi mọi sub-task được hoàn thành thì nhánh Develop sẽ được build >> test và tạo Pull Request (hay viết tắt là PR) để cả nhóm review và cho ý kiến (comment). Nếu mọi thứ đã được giải đáp thì PR này sẽ được merge vào nhánh chính (Main hoặc Master).

Một số câu lệnh Git cơ bản

Dưới đây là một số câu lệnh git cơ bản mà một tester cũng nên nắm được (hiểu) dù bạn là manual hay làm test automation. Các câu lệnh git bên dưới được sắp xếp theo thứ tự thường được sử dụng.

Giả sử cho trường hợp bạn bắt đầu làm việc với một repo (viết tắt của repository) mới, thêm vài file mới, sửa vài nơi, kiểm tra xem có gì mới trên nhánh chính không, lấy về, cập nhật, xử lý conflict (nếu có), rồi đẩy code (add > commit > push) mới lên repository.

Git clone

Sao chép một repository (kho lưu trữ) vào một thư mục mới. Thường là lấy một repository từ trên cloud (như Bitbucket, GitHub) về máy tính của mình (hay gọi là local).

Ví dụ: git clone https://[email protected]/tvntek/git-basics.git

Git status

Khi bạn muốn xem trạng thái của nhánh code hiện tại thì sử dụng “git status”. Nó sẽ cho thấy (hiển thị) trạng thái hiện tại của nhánh code mà bạn đang làm việc.

Ví dụ: git status (và nhấn enter)

Git checkout

Chuyển sang nhánh code khác hoặc “khôi phục” các file của nhánh đang làm việc (lấy các file cũ từ trên cloud về máy local).

Ví dụ: git checkout [tên nhánh cần lấy về]

Git fetch

Tải xuống các đối tượng và tham chiếu từ một kho lưu trữ khác. Thường là trước khi mình làm gì trên máy mình thì phải chạy lệnh git fetch để “refresh” hoặc cập nhật mọi thứ mới nhất (sync).

Thường mình sẽ sử dụng “git fetch” sau đó là git pull (để lấy những thứ mới về máy mình).

Ví dụ: git fetch (và nhấn enter)

Git pull

Tìm và lấy những thứ mới từ nơi lưu trữ repository (như GitHub, Bitbucket) về máy local của mình. Bạn không cần phải thực hiện “git fetch” trước vì khi thực hiện “git pull” nó sẽ thao tác như fetch rồi lấy về. “Git fetch” chỉ kiểm tra những thứ mới và KHÔNG lấy về nơi bạn đang đứng (local, hoặc nơi thực hiện lệnh – ví dụ trên CI/CD chẳng hạn).

Ví dụ: git pull

Git merge

Nếu bạn muốn merge (kết hợp) một nhánh code nào đó vào nhánh hiện tại của bạn thì sử dụng câu lệnh này.

Ví dụ: đứng ngay nhanh code của bạn, gõ “git merge master” rồi enter.

Một trường hợp thực tế thường thực hiện theo thứ tự các lệnh thường được sử dụng. Bạn đang ở nhánh code của bạn, thì thực hiện các lệnh sau: 

  1. Git checkout master
  2. Git pull
  3. Git checkout [tên nhánh code đang làm việc]
  4. Git merge master
  5. … Sau khi làm việc
  6. Git status (để xem tình hình)
  7. Git add . (nếu có thêm file mới)
  8. Git commit -m “thông điệp…”
  9. Git push

Xong việc!

Git add

Khi bạn vừa tạo thêm file (ví dụ 1 file test case mới: …loginThanhCong.spec.js) thì bạn phải sử dụng “git add” để đưa files cần commit vào 1 khu vực gọi là “stage” trước khi commit nó lên repository. Khi bạn chạy câu lệnh “git commit” thì nó chỉ lấy những file trong khu vực stage đưa lên repository trên cloud.

Ví dụ: “git add .” (có dấu chấm) là câu lệnh để bạn thêm TẤT CẢ file mới vào khu vực stage.

Git commit

Câu lệnh này ghi những thay đổi mới vào repository. Lúc này thay đổi thực sự CHƯA ĐƯỢC đưa vào repository trên Github hay Bitbucket. Để thực hiện việc “lưu” này bạn phải chạy lệnh “git push” (xem thêm bên dưới).

Ví dụ: git commit

Tuy nhiên, khi commit thì phải thêm thông tin lý do commit, nên thường phải commit kèm theo “lý do”

Ví dụ: git commit -m “TicketID: ly do thay doi la gi”

Git push

Đẩy những thứ vừa commit lên nơi lưu trữ repository (như GitHub hay Bitbucket). Giúp cập nhật các tham chiếu và các đối tượng liên quan. Sau câu lệnh “git commit” thì sẽ là “git push” để “thực hiện lưu thay đổi mới”

Ví dụ: git push

Tổng kết

Bài này nhằm giới thiệu cơ bản về Git cho các bạn tester nhất là manual tester hiểu hơn để làm việc với developer hoặc các bạn Automation Tester. Bài sau sẽ hướng dẫn chi tiết cách sử dụng các câu lệnh git trên thông qua một ví dụ cụ thể và tương tác trực tiếp với một repository thực tế nha.

Câu hỏi thường gặp liên quan đến các câu lệnh Git

Tester manual cần biết các câu lệnh git không?

Thật ra thì các câu lệnh git phần lớn liên quan đến việc lấy code (production code hay test automation code) lên xuống giữa server và máy của mình/hay trên CI. Nên manual tester/QC thường không cần biết. Hoặc có đọc qua nhưng không sử dụng bạn sẽ quên ngay thôi. Về test case manual thì đa phần sử dụng công cụ quản lý test case hoặc MS Excel/Google Sheets nên cũng không cần biết các câu lệnh git làm gì.

Khi nào thì sử dụng các câu lệnh git này?

Khi bạn cần thao tác và làm việc liên quan đến source code, bạn buộc phải biết các câu lệnh git, tối thiểu là các câu lệnh git cơ bản trên.

Có công cụ nào có UI thay thế các câu lệnh git cơ bản trên không?

Có, ví dụ như Source Tree – Một tool miễn phí do Atlassian cung cấp. Nhưng khi sử dụng các câu lệnh git cơ bản trên trong Terminal thì sẽ nhanh hơn là sử dụng tool có UI.

Happy testing!