Thao tác cơ bản với Git

  • Phuong Dang
  • 01/May/2022
Git
  1. Version system control (VCS)
  2. Centralized version control system (CVCS)
  3. Distributed version control system (DVCS)
  4. So sánh Git và GitHub/GitLab
  5. Thao tác cơ bản với Git
  6. Kết luận.
Làm việc với Git là skill chắc chắn phải có của tất cả các developers dù là FE hay BE. Bạn có thể tham khảo trên rất nhiều trang tuyển dụng IT sẽ thấy đây là một skill luôn luôn có của vị trí developer.

1. Version system control (VCS)

Trước khi tìm hiểu "Git là gì?" hay "Git làm việc như nào?", chúng ta hãy cùng nhau tìm hiểu qua khái niệm Version system control (VCS). VSC là 1 loại software tool giúp quản lý sự thay đổi của data/source code theo thời gian. Nó sẽ lưu trữ mọi sự thay đổi của source code trong 1 dạng database đặc biệt. Khi có lỗi xảy ra thì developer có thể revert lại hoặc compare các version trước để detect vấn đề 1 cách nhanh nhất.

2. Centralized version control system (CVCS)

Ý tưởng của CVCS là sẽ chỉ có 1 nơi lưu trữ source của project được gọi là Central repository. Developer có thể commit trực tiếp bất kỳ 1 sự thay đổi nào lên Central repository. Lúc này những developer khác có thể thấy được sự thay đổi này bằng cách update, CVCS sẽ tự động update nội dung mới nhất cho bất kỳ file nào có sự thay đổi.

Winzone.vn Centralized version control system (CVCS)
Figure 01. CVCS.

Làm việc với CVCS khi cần thêm tính năng mới hoặc fix bug thì có một trình tự điển hình như sau:

  • Update toàn bộ sự thay đổi hiện tại trên Central repository xuống local.
  • Thực hiện sự thay đổi mong muốn.
  • Commit sự thay đổi lên Central repository.

Có 1 vài central version control system phổ biến có thể bạn đã nghe hoặc dùng như: SVNPerforce

3. Distributed version control system (DVCS)

Với CVCS thì các thao tác update/commit là từ máy local của developer sẽ làm việc trực tiếp với Central Repository (Figure 01).
Còn với DVCS là mỗi developer sẽ clone Central Repository về local để tạo thành một Local Repository. Tất cả các thao tác update/commit thì sẽ làm việc với Local Repository trong mô hình DVCS (Figure 02).

Winzone.vn Decentralized version control system (DVCS)
Figure 02. DVCS.

Nếu bạn cho rằng cách thức này là lãng phí tài nguyên thì hãy yên tâm. Thực tế thì source của project đa phần là plain text file chỉ phần ít là image. Do đó thì sẽ không quá lãng phí disk space phải không? Ngược lại bằng cách đó lại mang khá nhiều lợi ích sau:

  • Có thể commit sự thay đổi lên local repository mà không ai bị ảnh hưởng cũng như nhìn thấy. Khi mọi thứ đã sẵn sàng bạn có thể push chúng lên central reposity.
  • Tất cả những hành động ngoài push/pull thì sẽ cực kỳ nhanh vì lúc này tool đang access vào hard drive thay vì 1 remote server.
  • Tất cả những hành động ngoài push/pull thì đều có thể thực hiện mà không cần internet.

Hiện nay với mô hình DVCS thì Mercurial, và Git là những loại tool phổ biến nhất. Bài viết hôm nay chúng ta sẽ cùng thảo luận về cách sử dụng Git

4. So sánh Git và GitHub/GitLab

Thông thường chúng ta sẽ phải setup một Git tool trên 1 remote server để làm việc như Central Repository.
  • Git: là free open source DVCS software như khái niệm chúng ta đã mô tả ở section 3
  • GitHub/GitLab: là một Git-based platform/Git provider được xây dựng dựa trên Git. Ngoài những tính năng có sẵn của Git, cả 2 platforms này đều cung cấp thêm nhiều tính năng khác. Dự án có thể tận dụng GitHub/GitLab mà không cần phải setup một Git trên remote server.
Trong bài viết này chúng ta sẽ dùng GitLab để thực hiện các thao tác cơ bản.

5. Thao tác cơ bản với Git - GitLab

Trước khi thao tác hãy chắc chắn rằng bạn đã thực hiện 2 điều dưới đây:

  • Cài đặt Git, refer link này để cài đặt với môi trường phù hợp.
  • Đăng ký tài khoản GitLab - free

5.1 Khởi tạo project trên GitLab

Đây sẽ là remote repository lưu trữ source code trên một remote server, giúp team có thể quản lý source trên môi trường internet.

Sau khi login, bạn tạo project với các bước sau: Menu > Projects > Create new project > Create blank project.

Winzone.vn Create project blank in GitLab
Figure 03. Create project blank in GitLab

Điển các thông tin tương ứng: Project Name, Project URL và click "Create Project" button. Sau khi tạo thành công sẽ có kết quả như sau:

Winzone.vn Create project blank success in GitLab
Figure 04. Create success project blank in GitLab

Bạn cũng có thể kiểm tra theo navigation như sau: Projects > Your Projects > Project name bạn vừa tạo

Trong thực tế bước 5.1 chỉ làm 1 lần bởi người phụ trách. Nên có thể skip nếu bạn tham gia vào dự án maintain đã có sẵn remote repository, hoặc bạn không phải là người phụ trách tạo remote repository.

5.2 Clone repository

Công việc khi tham gia vào dự án mới thông thường là clone source về máy local. Syntax như sau:

git clone <repo url>

Chúng ta cần cung cấp 1 repository URL để có thể clone source code được. Git support nhiều giao thức như SSH, HTTPS, trong ví dụ này chúng ta sẽ clone thông qua giao thức HTTPS. Bạn có thể lấy được repository url trên GitLab như hướng dẫn bên dưới:

Winzone.vn Clone project from GitLab
Figure 05. Clone project from GitLab
Chúng ta có thể clone như sau:
git clone https://gitlab.com/phuongdp/winzone-demo-git.git

Sau khi câu lệnh được execute thì phiên bản mới nhất của central reposity trên default branch (main or master) sẽ được download về và add vào một thư mực với có tên giống reposity name(trong ví dụ là winzone-demo-git)

Winzone.vn Clone project from GitLab success Winzone.vn Clone project from GitLab success
Figure 06. Trạng thái sau khi clone source thành công.

5.3 Commit changes to the local repository

Git hoạt động theo mô hình DVCS nên tất các sự thay đổi từ local cần phải được update vào local repository sau đó mới có thể push lên remote repository. Một số command làm việc với local repository:

  • git status: compare trạng thái của repository hiện tại với trạng thái local repository để liệt kê ra những kiểm khác nhau.
  • git add: chỉ định những file sẽ được lưu lên local repository bằng cách add chúng vào staging area.
  • git commit: lưu những sự thay đổi sau khi lựa chọn từ git add lên local repository.

git add có thể dùng với một số cách chỉ định file/folder hoặc toàn bộ sự thay đổi:

git add demo.txt                       # Chỉ định file demo.txt
git add demoFolder                     # Chỉ định file toàn bộ file trong demoFolder
git add .                              # Chỉ định toàn bộ sự thay đổi trong project

git commit với message có syntax như sau:

git commit -m "<message>"

Áp dụng với project demo như sau:

  1. Tạo mới 1 file demo.txt trong project folder.
  2. Kiểm tra trạng thái thay đổi bằng git status: có 1 file demo.txt untracked.
  3. Chỉ định toàn bộ sự thay đổi trong project bằng git add . lên staging area
  4. Kiểm tra lại trạng thái so với local repository bằng git status: có 1 file demo.txt được tạo mới.
  5. Commit sự thay đổi đó với message "commit demo.txt file" lên local repository bằng git commit -m "commit demo.txt file".
Winzone.vn Git commit to local repository
Figure 07. Commit changes to the local repository.

Tất cả các thay đổi này chỉ thực hiện trên local repository. Kiểm tra central repository trên GitLab chúng ta sẽ chưa thấy có gì thay đổi.

5.4 Push changes to the central repository

Việc tiếp theo cần làm là push chúng lên central repository. Chúng ta sẽ sử dụng git push với syntax như sau:

git push <remote> <branch>

Áp dụng với project demo như sau:

  • origin: là tên default prefix name cho những remote branch.
  • main: default branch của project trên GitLab (GitHub sẽ sử dụng branch default là master). Khái niệm branch chúng ta sẽ để cập trong bài viết sau.
Winzone.vn Git push to central repository Winzone.vn Git push to central repository
Figure 08. Push changes to the central repository.

5.5 Pull changes from the central repository

Trong thực tế 1 project sẽ có nhiều member cùng làm việc, thế nên chúng ta cũng cần phải lấy source code mà member khác push lên. Để giả lập cho việc này, chúng ta sẽ tạo mới 1 file trên central repository để tạo ra 1 sự thay đổi cần pull về local.

Winzone.vn create new file in gitlab Winzone.vn create new file in gitlab
Figure 09. Create new file in GitLab.

Để lấy source code mới nhất của branch đang sử dụng (main branch) trên central repository. Chúng ta sẽ sử dụng git pull command.

  1. Trạng thái trước khi pull project folder chưa có new_file_need_to_pull.txt file
  2. Thực hiện git pull
  3. Trạng thái sau khi pull project folder có new_file_need_to_pull.txt file
Winzone.vn git pull success from git lab
Figure 10. Git pull success from central repository

6. Kết luận

Hi vọng sau bàu viết này, các bạn đã hiểu về mô hình VCS và có thể thao tác cơ bản với Git/GibLab thông qua các command: clone, status, add, commit, pull, push.

Nếu bạn đang cảm thấy làm việc với Git có nhiều câu lệnh thế này thì thật khó nhớ. Hãy yên tâm nhé, ngoài cách làm việc với command chúng ta có nhất nhiều tool hỗ trợ làm việc một cách thân thiện với Guide thông qua Git Guide Client, hoặc 1 số loại extension được tích hợp sẵn trong các IDE