Git là gì? Hướng dẫn cho Người mới bắt đầu về Git

Git là một hệ thống kiểm soát phiên bản (version control) mà các nhà phát triển sử dụng trên toàn thế giới. Nó giúp bạn theo dõi các phiên bản mã khác nhau và cộng tác với các nhà phát triển khác.

Nếu bạn đang thực hiện một dự án theo thời gian, bạn có thể muốn theo dõi những thay đổi nào đã được thực hiện, bởi ai và những thay đổi đó được thực hiện khi nào. Điều này ngày càng trở nên quan trọng nếu bạn gặp lỗi trong mã của mình! Git có thể giúp bạn điều này.

Nhưng Git cũng có thể hơi đáng sợ và khó hiểu khi bạn mới bắt đầu học nó, vì vậy trong bài viết này tôi sẽ giới thiệu Git theo cách hiểu của con người. Chúng tôi sẽ đề cập đến các chủ đề như repository, commit, branch và nhiều hơn nữa, vì vậy hãy bắt đầu!

Đây là những gì chúng ta sẽ xem xét trong bài viết này:

  • Git là gì?
  • GitHub là gì?
  • Cách bắt đầu sử dụng Git.
  • Git theo dõi những thay đổi như thế nào?
  • Quy trình làm việc Git điển hình.

Git là gì?

Git là một hệ thống kiểm soát phiên bản mà bạn tải xuống máy tính của mình. Điều cần thiết là bạn phải sử dụng Git nếu bạn muốn cộng tác với các nhà phát triển khác trong một dự án hoặc làm việc trong dự án của riêng bạn.

Để kiểm tra xem bạn đã cài đặt Git trên máy tính chưa, bạn có thể nhập lệnh git --version vào terminal hoặc cửa sổ dòng lệnh.

Nếu bạn đã cài đặt Git thì bạn sẽ thấy bạn có phiên bản nào. Nếu bạn chưa cài đặt Git, bạn có thể truy cập trang web Git và dễ dàng làm theo hướng dẫn tải xuống để cài đặt phiên bản chính xác cho hệ điều hành của mình.

GitHub là gì?

GitHub là một sản phẩm cho phép bạn lưu trữ các dự án Git của mình trên một máy chủ từ xa ở đâu đó (hay nói cách khác là trên đám mây).

Điều quan trọng cần nhớ là GitHub không phải là Git. GitHub chỉ là một dịch vụ lưu trữ. Có những công ty khác cung cấp dịch vụ lưu trữ tương tự như GitHub, chẳng hạn như Bitbucket và GitLab.

Sự khác nhau giữa Git và GitHub
Sự khác nhau giữa Git và GitHub

Cách bắt đầu với Git

Dòng lệnh (Terminal) so với Giao diện người dùng (GUI)

Bạn có thể sử dụng Git bằng cách nhập các lệnh trong terminal/cửa sổ dòng lệnh hoặc bạn có thể sử dụng giao diện người dùng đồ họa (GUI) như Sourcetree hoặc GitKraken.

Nếu bạn chọn terminal, bạn sẽ phải tra cứu lệnh Git nào bạn sẽ cần.

May mắn thay, bạn không cần phải học những điều này thuộc lòng. Ngoài một số lệnh mà bạn sẽ sử dụng thường xuyên nhất, phần còn lại bạn có thể tra cứu bất cứ khi nào bạn cần (đây là điều mà hầu hết các nhà phát triển làm, ngay cả những người có hàng chục năm kinh nghiệm). Git cung cấp tài liệu chuyên sâu trên trang web của họ.

Nếu bạn chọn sử dụng GUI, thì các hành động khác nhau bạn cần thực hiện sẽ được hiển thị theo cách trực quan hơn.

Cho dù bạn chọn sử dụng terminal hay GUI, bạn sẽ cần hiểu những điều cơ bản về cách Git hoạt động để sử dụng nó một cách tự tin.

Đối với phần còn lại của bài viết này, chúng tôi sẽ chia sẻ các ví dụ sử dụng Git trong terminal. Nhưng các bước chúng tôi chia sẻ rất giống nhau nếu bạn đang sử dụng GUI.

Cách chuẩn bị thư mục dự án của bạn trong Git

Để sử dụng Git, chúng ta cần có một dự án mà chúng ta muốn kiểm soát phiên bản. Đây có thể là một dự án mới hoặc một dự án hiện có.

Nếu đó là một dự án mới, thì chúng ta cần tạo một thư mục dự án mới bằng lệnh mkdir trong terminal.

Nếu chúng ta chọn một dự án hiện có thì chúng ta chỉ cần di chuyển vào thư mục dự án đó trong terminal.

Trong ví dụ của chúng tôi, chúng tôi sẽ tạo một thư mục dự án mới có tên novel.

Tạo thư mục dự án
Tạo thư mục dự án

Cách tạo kho lưu trữ Git (Git Repository)

Khi chúng ta đã ở trong thư mục dự án của mình, để bắt đầu sử dụng Git, chúng ta sẽ cần tạo (hoặc khởi tạo) một kho lưu trữ bằng lệnh git init.

Khi chúng ta thực hiện lệnh bằng cách nhập nó vào terminal và nhấn enter, nó có thể sẽ không có nhiều điều xảy ra. Nhưng đừng để bị lừa dối, đôi khi Git có thể âm thầm thực hiện rất nhiều hành động đằng sau.

Để xem những gì Git đã làm đằng sau, chúng ta sẽ phải xem các tệp ẩn của chúng ta. Đảm bảo mở thư mục dự án của bạn trong hệ thống tệp của bạn. Sau đó, nếu bạn đang sử dụng máy Mac, bạn có thể chọn Command + Shift + Dot để xem các tệp ẩn trong hệ thống tệp của mình. Nếu bạn đang sử dụng hệ điều hành Windows thì bạn có thể thay đổi cài đặt chế độ xem của mình để xem các tệp ẩn trong hệ thống tệp của bạn.

Để xem các tệp ẩn trong terminal, chúng ta có thể sử dụng lệnh ls -a.

Những gì chúng ta sẽ thấy bây giờ là một thư mục .git bên trong thư mục dự án của chúng ta. Đây thường là những gì đại diện cho kho lưu trữ (repository) của chúng ta.

Tạo repository
Tạo repository

Kho lưu trữ Git là gì?

Kho lưu trữ (repository) là thư mục .git bên trong thư mục dự án của chúng ta. Nó sẽ theo dõi tất cả những thay đổi được thực hiện đối với các tệp trong dự án của chúng ta và ghi lại lịch sử đó theo thời gian.

Kho lưu trữ mà chúng ta có trên máy tính của mình được gọi là kho lưu trữ cục bộ (local repository).

Trước đó chúng ta đã đề cập đến các dịch vụ lưu trữ như GitHub, GitLab và Bitbucket. Khi chúng ta đẩy (push - hay nói cách khác là tải lên) kho lưu trữ cục bộ của mình lên một trong những dịch vụ này, thì kho lưu trữ nằm trong dịch vụ này trên đám mây được gọi là kho lưu trữ từ xa (remote repository).

Điều quan trọng là sử dụng kho lưu trữ từ xa để có thể cộng tác với những người khác cũng như sao lưu các dự án của chúng ta trong trường hợp có điều gì đó xảy ra với máy tính xách tay hoặc máy tính của chúng ta.

Cách cộng tác với các nhà phát triển khác bằng Git

Nếu một nhà phát triển khác muốn cộng tác với chúng ta trong dự án của chúng ta thì họ có thể sao chép (clone - hay nói cách khác là tải xuống) kho lưu trữ từ xa từ dịch vụ lưu trữ mà bạn đã tải nó lên máy tính của họ.

Điều này cho phép họ có dự án trên máy tính của họ. Dự án trên máy tính của họ sau đó cũng được gọi là kho lưu trữ cục bộ.

Trong một dự án có nhiều nhà phát triển, mỗi nhà phát triển có một kho lưu trữ cục bộ trên máy tính của họ. Và có một kho lưu trữ từ xa mà tất cả họ đều đóng góp và họ sử dụng nó để chia sẻ công việc của mình.

Repository từ xa và Repository cục bộ
Repository từ xa và Repository cục bộ

Git theo dõi các thay đổi như thế nào?

Để lưu các phiên bản khác nhau của dự án của chúng ta trong Git, chúng ta sẽ thực hiện commit.

Git Commit là gì?

Một commit là một phiên bản của dự án của bạn. Nó đại diện cho một phiên bản độc lập của dự án của bạn và có tham chiếu đến tất cả các tệp và thư mục là một phần của phiên bản đó.

Làm cách nào để thực hiện commit trong Git?

Để hiểu cách chúng ta thực hiện một commit, chúng ta cần tìm hiểu về ba không gian khác nhau bên trong Git - thư mục làm việc, vùng tổ chức và lịch sử commit.

Thư mục làm việc về cơ bản được đại diện bởi nội dung của thư mục dự án của chúng ta. Nó giống như một băng ghế làm việc, nơi chúng ta có thể thêm, chỉnh sửa và xóa các tệp trong dự án của mình.

Vùng tổ chức và lịch sử commit là một phần của kho lưu trữ của chúng ta.

Vùng tổ chức giống như một không gian nháp. Đây là nơi chúng ta có thể thêm các phiên bản cập nhật của tệp hoặc xóa tệp để chọn những gì chúng ta muốn đưa vào commit tiếp theo (phiên bản dự án của chúng ta). Trong thư mục .git, vùng tổ chức được biểu diễn bằng một tệp được gọi là index.

Và cuối cùng, lịch sử commit về cơ bản là nơi các commit của chúng ta tồn tại sau khi chúng được thực hiện. Trong thư mục .git, lịch sử commit được đại diện bởi một thư mục có tên objects.

Thư mục làm việc, kho lưu trữ, khu vực dàn dựng và lịch sử commit
Thư mục làm việc, kho lưu trữ, khu vực dàn dựng và lịch sử commit

Quy trình làm việc điển hình với Git

Bước 1 - Chỉnh sửa file

Nếu bạn có một dự án mới, bạn sẽ tạo tệp đầu tiên trong dự án mới của mình. Trong thư mục novel dự án của chúng ta, chúng ta sẽ tạo một tệp văn bản đơn giản có tên chapter1. Chúng ta có thể làm điều này bằng cách sử dụng trình soạn thảo văn bản hoặc trực tiếp trong terminal. Trong ví dụ của chúng ta, chúng ta làm điều đó trực tiếp trong terminal bằng cách nhập touch chapter1.txt.

Nếu bạn có một dự án hiện có thì bạn sẽ chỉnh sửa một số tệp hiện có của mình, thêm tệp mới hoặc xóa tệp.

Tiếp theo, chúng ta có thể sử dụng lệnh git status. Lệnh này sẽ cho chúng ta biết trạng thái của thư mục làm việc và khu vực dàn dựng của chúng ta và sẽ cho chúng ta biết nếu có bất kỳ sự khác biệt nào giữa hai.

Thêm file vào project
Thêm file vào project

Trong ví dụ này, chúng tôi chỉ thêm một tệp mới vào dự án mới của mình. Khi chúng ta sử dụng lệnh git status, Git cho chúng ta biết rằng chúng ta có một tệp chưa được theo dõi trong thư mục làm việc của mình và chúng ta cần sử dụng lệnh git add để đưa nó vào những gì sẽ được commit. Điều này sẽ đưa chúng ta đến bước 2.

File của chúng ta nằm trong thư mục làm việc (Working Directory)
File của chúng ta nằm trong thư mục làm việc (Working Directory)

Bước 2 - Thêm file vào vùng tổ chức

Chúng ta có thể sử dụng lệnh git add này để thêm các file mới hoặc cập nhật vào vùng tổ chức. Nếu chúng ta quyết định không muốn thêm một số tệp mà chúng ta đã thay đổi trong lần commit tiếp theo thì chúng ta chỉ cần đảm bảo không thêm các tệp cụ thể đó vào vùng tổ chức.

Thêm file vào vùng tổ chức
Thêm file vào vùng tổ chức

Trong ví dụ này, chúng tôi thêm tệp duy nhất mà chúng tôi có trong dự án của mình vào vùng tổ chức bằng cách sử dụng lệnh git add và truyền vào tên của tệp. Sau đó, nếu chúng ta sử dụng lệnh git status, Git cho biết rằng chúng ta đã thêm tệp của mình vào vùng tổ chức.

File nằm trong vùng tổ chức (Staging Area)
File nằm trong vùng tổ chức (Staging Area)

Điều quan trọng cần lưu ý là các file không di chuyển từ thư mục làm việc sang vùng tổ chức. Các file được sao chép từ thư mục làm việc sang vùng tổ chức.

Bước 3 - Thực hiện commit

Cuối cùng, để thực hiện commit, chúng ta sử dụng lệnh git commit với tùy chọn -m và truyền vào một thông điệp chẳng hạn git commit -m "this is the first commit".

Thực hiện commit đầu tiên
Thực hiện commit đầu tiên

Sau đó, chúng ta có thể sử dụng lệnh git log để liệt kê tất cả các commit mà chúng ta có trong dự án của mình theo thứ tự thời gian cũ dần. Trong ví dụ của này, chúng ta chỉ có một commit.

Chúng ta đã thực hiện commit đầu tiên của mình
Chúng ta đã thực hiện commit đầu tiên của mình

Bây giờ chúng ta đã thực hiện commit đầu tiên trong dự án của mình! Nói cách khác, chúng ta đã lưu phiên bản đầu tiên của dự án của chúng tôi.

Commit có một mã băm 40 ký tự chữ cái và số đóng vai trò như tên định danh cho commit hoặc một cách để tham chiếu đến nó.

Chúng ta cũng có thể xem thông tin như ai đã thực hiện commit, thời điểm thực hiện commit và thông điệp của commit.

Lịch sử commit trong Git là gì?

Một kho lưu trữ (repository) bao gồm nhiều commit và trong trường hợp đơn giản nhất, mỗi commit có một commit mẹ là commit đứng trước nó. Đó là lý do tại sao một commit trỏ lại commit trước nó như hình ảnh bên dưới.

Có nhiều trường hợp phức tạp hơn khi chúng ta đi vào lĩnh vực của nhiều nhánh (branch) và hợp nhất (merge), nhưng điều đó nằm ngoài phạm vi của bài viết này.

Một lịch sử commit đơn giản
Một lịch sử commit đơn giản

Cuối cùng, Branch trong Git là gì?

Một nhánh (branch) là một con trỏ đến một commit. Nhánh mặc định trong Git được gọi là master.

Chúng ta có thể thấy rằng một nhánh là một con trỏ đến một commit bằng cách đi vào thư mục .git -> refs -> heads và cuối cùng mở tệp được gọi master. Bên trong tệp này, chúng ta sẽ thấy rằng có một mã băm. Đây là mã băm của commit mà nhánh master của chúng ta đang trỏ tới.

Một lần nữa chúng ta có thể sử dụng lệnh git log để liệt kê tất cả các commit trong kho lưu trữ của mình và chúng ta sẽ thấy rằng mã băm đó thẳng hàng với commit có nhãn master bên cạnh nó trong dấu ngoặc đơn.

Hiển thị nhánh master trong thư mục .git
Hiển thị nhánh master trong thư mục .git

Trong terminal, chúng ta có thể xem danh sách tất cả các nhánh bằng cách gõ lệnh git branch.

Các nhánh thực sự quan trọng vì chúng giúp bạn dễ dàng cộng tác với những người khác và làm việc trên nhiều tính năng hoặc các phần khác nhau trong dự án của bạn cùng một lúc.

Khi chúng tôi thực hiện nhiều commit hơn, nhánh của chúng tôi sẽ cập nhật để chỉ ra committ mới nhất của chúng tôi.

Phần kết luận

Còn rất nhiều thứ khác về Git, tuy nhiên trong bài viết này, chúng tôi chỉ trình bày sơ lược về Git. Hẹn gặp bạn ở các bài viết khác để tìm hiểu thêm về Git.

Git
Bài Viết Liên Quan:
Cách giải quyết xung đột trong Git
Trung Nguyen 26/03/2021
Cách giải quyết xung đột trong Git

Bài viết này sẽ giới thiệu tới bạn: làm thế nào và khi nào các xung đột thường xảy ra, chúng ta sẽ làm gì để giải quyết chúng.

Git Cheat Sheet - 50 lệnh Git bạn nên biết
Trung Nguyen 26/03/2021
Git Cheat Sheet - 50 lệnh Git bạn nên biết

Git có nhiều lệnh khác nhau mà bạn có thể sử dụng. Hướng dẫn này giới thiệu với bạn 50 lệnh Git được mọi người sử dụng thường xuyên nhất.

Sử dụng branch hiệu quả trong Git
Trung Nguyen 25/03/2021
Sử dụng branch hiệu quả trong Git

Trong bài viết này, tôi sẽ giới thiệu với bạn mô hình sử dụng Git hiệu quả mà tôi đã và đang sử dụng trong các dự án nhiều năm trở lại đây.