Tiếp nối bài trước, sau khi chúng ta đã hoàn thành việc cài đặt và cấu hình Git trên môi trường của mình. Trong bài viết này, Stringee và các bạn sẽ cùng nhau tìm hiểu một số khái niệm cơ bản của git.

1. Repository

Repository (thường được gọi tắt là repo) là nơi chứa tất cả những thông tin cần thiết để duy trì và quản lý các sửa đổi và lịch sử của project. Có hai loại repository là remote repository và local repository.

1.1. Local repository

Đây là repository chỉ được setup trên máy của lập trình viên và dành cho một người dùng sử dụng.

Tất cả dữ liệu của repo sẽ được chứa trong thư mục ẩn có tên là .git. Để khởi tạo một local repository, chúng ta có thể dùng câu lệnh:

git init

Sau khi khởi tạo chúng ta có thể thấy trong thư mục mã nguồn hiện tại sẽ sinh ra thêm một folder có tên là .git. Một branch mặc định được git tạo có tên là master. Đây được coi là branch gốc và sẽ là version source code mới nhất mà chúng ta cần duy trì.

$  git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:  git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint:  git branch -m <name>
Initialized empty Git repository in /Users/duyenthai/Volumes/Workspaces/MyWorkspace/Repositories/git-repo/.git/

Kiểm tra lại thư mục:

$ ls -la
total 0
drwxr-xr-x   3 duyenthai  staff   96 Apr  1 21:43 .
drwxr-xr-x  29 duyenthai  staff  928 Apr  1 21:43 ..
drwxr-xr-x   9 duyenthai  staff  288 Apr  1 21:43 .gi

1.2. Remote repository

Đây cũng là một repository, tuy nhiên điểm khác biệt của nó đối với một local repository đó là nó có thể được chia sẻ giữa nhiều người. Một số công cụ phổ biến có thể kể đến như: GitHub, Bitbucket, GitLab… 

Về cơ bản thì mỗi quan hệ của hai loại repository này có thể được mô tả một cách đơn giản bằng hình ảnh dưới đây:

2. Branch

Mỗi một branch trong Git sẽ tương tự như một workspace riêng. Khi chúng ta sử dụng một workspace khác chúng ta có thể thấy được toàn bộ source code mình đang thay đổi sẽ không bị ảnh hưởng tới source code trên một branch khác, giống như là đang sử dụng một workspace khác vậy.

Branch sẽ được sử dụng để phát triển các tính năng mới mà không làm ảnh hưởng tới mã nguồn đang được chạy.

      A---B---C new_feature
     /
D---E---F---G master

Ví dụ như ở phần trước đã nhắc đến, master là branch mặc định của một repository. Khi thực hiện một tính năng mới, bạn cần thực hiện công việc là tạo một nhánh mới và phát triển trên đó.

Đến khi đã hoàn thành phát triển tính năng mới, bạn có thể commit hoặc merge nó vào branch master của mình.

Để switch sang một nhánh khác, chúng ta sẽ sử dụng lệnh:

git checkout branch_name

Để checkout sang một branch mới được tạo từ nhánh hiện tại chúng ta sẽ dùng lệnh:

git checkout -b new_branch_name

3. Commit và merge

Commit là hành động đã snapshot lại file ở staging trên index của một git directory. Hiểu đơn giản là chúng ta đã record lại các thay đổi của mình trong repo.

Khi thực hiện một commit, repository sẽ tạo ra một commit lưu lại sự thay đổi trong các file đã commit trước đó với file hiện tại. Mỗi commit đều yêu cầu phải có commit message, chúng sẽ giải thích cho bạn biết commit đó bao gồm những thay đổi gì.

Các bước thực hiện một commit sẽ được thực hiện một cách rút gọn như sau:

Bước 1: Trước khi commit bạn cần chỉ ra những file mình cần commit. Điều này có thể được thực hiện bằng việc sử dụng câu lệnh git add

git add -A

Bước 2: Thực hiện commit các thay đổi

git commit

Bước 3: Điền commit message trong editor thực hiện commit và save lại để hoàn thành commit.

Bạn hoàn toàn có thể kiểm tra lại các commit đã thực hiện trên nhánh của mình bằng việc xem log của git với lệnh git log.

4. Pull và fetch

Trong Git, Git Pull và Git Fetch là có chức năng tương đồng với nhau. Cả hai đều được sử dụng để tải xuống dữ liệu mới từ một remote repo. Tuy nhiên, Git Fetch thường được coi là một phiên bản an toàn hơn của Git Pull.

Khi thực hiện fetch cùng với remote origin, Git sẽ tải về dữ liệu của tất cả các branch của repository trên remote server nằm tại địa chỉ quy định bởi remote origin và cập nhật dữ liệu này với dữ liệu của cách branch phía dưới máy local.

Tuy nhiên git fetch không cập nhật dữ liệu của working directory(Thư mục làm việc). Điều này có nghĩa là nếu như có bất cứ commit nào trên remote server thì chúng cũng không ảnh hưởng tới các tập tin, thư mục của bạn.

Khi thực pull cùng với remote origin và branch_name:

$ git pull remote_origin branch_name

Git sẽ áp thực hiện việc fetch dữ liệu của Git repository tại nhánh branch_name từ server nằm tại địa chỉ quy định bởi remote origin và áp dụng (merge) các thay đổi này vào thư mục và tập tin ở working directory. Git pull sẽ có thể gây ra xung đột (conflict) trong khi merge.

>>> Xem thêm bài viết:

Hướng dẫn cài đặt unix linux 

Hướng dẫn cài đặt k8s Kubenertes Cluster

Scheduling - Lập lịch trên K8s

5. Push

Push là hành động đưa nội dung của local repository lên một remote repository. Lệnh push cơ bản có thể được thực hiện với cú pháp như sau:

$ git push remote_name branch_name

Tuy nhiên, để có thể push được một local repo lên một remote repo, chúng ta sẽ cần cấu hình một remote origin cho nó. Việc này thì rất đơn giản, chúng ta chỉ cần khởi tạo một remote repo và clone nó về là xong.

Trong một số trường hợp thay đổi remote repo, chúng ta có thể kiểm tra remote của mình bằng lệnh kiểm tra git remote -v

git remote -v
origin git@github.com:duyenthaind/some-api.git (fetch)
origin git@github.com:duyenthaind/some-api.git (push)

Ở đây ta có thể thấy chỉ có một nguồn remote là origin. Giả sử bạn muốn đồng bộ các thay đổi tại nhánh master từ local repo lên remote thì ta sẽ thực hiện như sau:

# checkout sang nhánh master
git checkout master
# push local master lên remote
git push origin master master

Kết

Git là một công cụ rất mạnh hỗ trợ lập trình viên trong công việc quản lý source code của mình. Các bước cài đặt Git rất đơn giản, chỉ với một vài thao tác bạn đã hoàn toàn có thể cài đặt và cấu hình nó sẵn sàng cho các mục đích sử dụng của mình.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: