You are currently viewing Git & Github: Sử dụng cơ bản đến nâng cao

Git & Github: Sử dụng cơ bản đến nâng cao

Lời nói đầu

Trong hầu hết các dự án nhóm, đặc biệt là bài tập lớn, mỗi thành viên sẽ được phân bổ cho 1 phần code khác nhau nên khi cần tổng hợp lại thành 1 sản phẩm hoàn chỉnh sẽ làm như nào? Hầu hết các bạn sẽ nghĩ đến việc tập trung tại nhà một thành viên, tại thư viện, tại quán cafe để ‘copy and paste’ và cùng chỉnh sửa, kiểm tra. Hoặc có thể là một thằng làm gánh cả team cho mượt.

Vậy trong các công ty, tổ chức lớn với những công việc nặng đô hơn, họ làm cách nào?

Câu trả lời khá đơn giản, họ sẽ sử dụng các hệ thống quản lý, thứ có thể đáp ứng các yêu cầu về việc đồng bộ, kiểm soát giữa các thành phần được tải lên dữ liệu đám mây, hay có thể hiểu là quản lý trực tuyến và đồng bộ giữa các máy chủ.

Khi tìm hiểu về lập trình và phần mềm điện tử, nhiều người đã từng nghe qua về Git hay Github nhưng chưa thực sự biết đến và sử dụng những hệ thống này trong cuộc sống cũng như công việc cá nhân. Vậy nên, trong tài liệu này, mình sẽ chia sẻ một số kiến thức về Git/Github từ cơ bản đến nâng cao.

Mục lục

Phần 1: Giới thiệu về Git và Github 4

  1. Git và Github là gì? 4
  2. Git hoạt động thế nào? 4

Phần 2: Git/Github dành cho người mới bắt đầu 6

  1. Một số khái niệm cơ bản 6
  2. Cài đặt Git 7
  3. Câu lệnh và thao tác cơ bản 7

Phần 1: Giới thiệu về Git và Github

1. Git và Github là gì?

Git là một hệ thống giúp một nhóm developer trong 1 dự án phát triển phần mềm có thể quản lý tài liệu, source code, đồng thời ghi lại lịch sử chỉnh sửa về việc thay đổi cấu trúc, sửa lỗi, thêm tính năng,… 

Nhờ vào những đặc điểm đó, người dùng có thể kiểm soát các lỗi hệ thống, tiến trình dự án và tối ưu tốc độ cũng như hiệu quả của chương trình.

Github là dịch vụ lưu trữ dựa trên web dành cho kho lưu trữ Git, cung cấp nền tảng cho các nhà phát triển cộng tác trong các dự án phần mềm, theo dõi sự cố và lỗi cũng như quản lý các phiên bản mã.

2. Git hoạt động thế nào?

Có một thuật ngữ cho hệ thống của Git đó là hệ thống quản lý phiên bản phân tán (Distributed Version Control System).

Trong hệ thống quản lý phiên bản phân tán, mọi thành viên đều có một bản sao cục bộ hay còn gọi là “clone” của kho lưu trữ chính, tức là mọi người đều được truy cập vào nguyên cả dự án của đội trong thiết bị cá nhân với tất cả dữ liệu, tệp tin,…

Bạn sẽ hiểu nó tốt hơn bằng cách tham khảo sơ đồ dưới đây:

Quy trình làm việc của hệ thống kiểm soát phiên bản phân tán - Git là gì - Aptech Buôn Ma Thuột 768x508

Quy trình làm việc của hệ thống kiểm soát phiên bản phân tán

Như bạn có thể thấy trong sơ đồ trên, mỗi lập trình viên tự duy trì một kho lưu trữ cục bộ, điều này có nghĩa rằng trên thiết bị của họ đều lưu trữ một bản sao giống hệt với kho lưu trữ trung tâm. Họ có thể cam kết (commit) và cập nhật (update) kho lưu trữ cục bộ của mình mà không có sự can thiệp nào.

Ngoài ra, khi cần đồng bộ và cập nhật dữ liệu, người dùng có thể sử dụng một hoạt động gọi là “pull”. Một hoạt động khác là “push” với chức năng đẩy các cập nhật của kho cục bộ cá nhân lên trung tâm chính.

Những đặc điểm trên giúp mỗi thành viên trong dự án đều được sử dụng, kết hợp toàn dự án với phần làm việc cá nhân. Điều này giúp chúng ta điều chỉnh source code nhanh chóng để thích hợp với mọi người.

Không chỉ vậy, người dùng không cần kết nối với máy chủ 24/7 nên có thể làm việc ở bất cứ đâu, chỉ khi cần “pull” và “push” mới cần có kết nối Internet. Đồng thời, việc ủy thác các thay đổi có thực hiện dễ dàng mà không chịu sự can thiệp của kho lưu trữ chính và được ghi lại rất rõ ràng. Đặc biệt nhất, nhờ vào việc các bản sao cục bộ được lưu trữ trên thiết bị riêng, dù máy chủ trung tâm bị sập thì vẫn có thể phục hồi dữ liệu dễ dàng.

Phần 2: Git/Github dành cho người mới bắt đầu

1. Một số khái niệm cơ bản

a. Repository

Hiểu đơn giản thì đây là khó lưu trữ tất cả những thông tin về việc chỉnh sửa hay lịch sử dự án. Git có 2 loại repository là Remote RepositoryLocal Repository:

  • Local Repository:là repository lưu trữ trên thiết bị cá nhân của chúng ta, local repository được đồng bộ với máy chủ dữ liệu thông qua các câu lệnh của Git.
  • Remote Repository:là repository được lưu trữ trên các nền tảng chuyên dụng. Một số nền tảng phổ biến là Github, Gitlab, Bitbucket,…

Chốt lại, GitHub chính là một Remote Repository lưu trữ tất cả những thông tin cần thiết để quản lý các sửa đổi và lịch sử của toàn bộ project.

b. Working tree và Index (hoặc staging area)

Đây là những thư mục được đặt trong sự quản lý của Git, nơi mọi người thực hiện công việc trên đó, được gọi là working tree. Giữa repository và working tree tồn tại một nơi gọi là index hay staging area. Staging area là nơi để chuẩn bị cho việc commit vào repository.

Nói cách khác, staging area là nơi biểu thị những cập nhật của phần công việc của chúng ta so với dự án chung, những cập nhật đó đang được chạy trên thiết bị của chúng ta nhưng chưa được sát nhập lên dự án chung và tất nhiên mọi người chưa có ảnh hưởng gì từ những cập nhật đó.

A diagram of a diagram Description automatically generated with medium confidence

Sơ đồ biểu thị mối quan hệ giữa các thành phần

2. Cài đặt Git

Các bạn có thể truy cập vào đường dẫn: https://git-scm.com/downloads để tải và cài đặt Git theo từng hệ điều hành khác nhau

Để kiểm tra, các bạn hãy bật Command Prompt hoặc Terminal của máy tính lên rồi dùng câu lệnh git –version để kiểm tra, nếu màn hình in ra phiên bản Git hiện tại thì đã cài đặt thành công.

Với hệ điều hành Windows nói riêng, khi cài đặt Git có thể sẽ có một Terminal riêng đi kèm mang tên Git Bash.

Để thuận lợi cho việc sử dụng Git, hãy tạo 1 tài khoản Github trên Github.com và ghi nhớ tên gmail cũng như tên đăng nhập.

3. Câu lệnh và thao tác cơ bản

a. Khởi tạo 1 git repository

Các bạn hãy chọn 1 Folder để chứa các thông tin quản lý về lịch sử của dự án, click chuột phải rồi chọn Git Bash HereA screenshot of a computer menu Description automatically generated

Sau khi cửa sổ console của Git Bash hiện lên, các bạn hãy gõ dòng lệnh git init để khởi tạo:A screenshot of a computer program Description automatically generated

Tất cả các thông tin về quản lý lịch sử chỉnh sửa sẽ được lưu trong thư mục .git, đây là một thư mục quan trọng nên được lưu trữ như 1 hidden item, hãy suy nghĩ thật kĩ trước khi xóa file này nhée.

Sau khi khởi tạo, chúng ta sẽ đăng nhập vào tài khoản bằng 2 câu lệnh sau:

git config –global user.email “<email bạn dùng để tạo tài khoản>”

git config –global user.name “<tên đăng nhập của bạn>”

b. Cập nhật các thay đổi và đẩy lên Staging Area

Tại thư mục làm việc, bạn nhập câu lệnh git add .hoặc git add -A thì mọi thay đổi trong thư mục làm việc của bạn sẽ được đẩy lên Staging Area.

Ngoài việc cập nhật tất cả chỉ mục bằng câu lệnh git add -Ara thì chúng ta có thể chỉ định các thư mục, tệp tin riêng lẻ bằng cú pháp:

git add <đường dẫn>

<đường dẫn> ở đây có thể là đường dẫn đến thư mục, tệp tin mà mình cần cập nhật.

c. Lưu các thay đổi trong thư mục làm việc vào repository

Để đẩy các cập nhật từ thiết bị cá nhân lên reposity, chúng ta sử dụng câu lệnh commitvới cú pháp:

git commit -m “<thông báo, thông tin về các thay đổi>”

Các thông báo thường được ghi ngắn gọn, súc tích và tóm tắt các thay đổi mà bạn đưa ra.

d. Nạp các thay đổi từ kho lưu trữ trung tâm về kho lưu trữ cục bộ

Công việc này sẽ hợp nhất các thay đổi ở mã nguồn trong lưu trữ cục bộ trong thiết bị cá nhân của bạn.

Trước nhất, bạn cần phải tạo kết nối giữa kho lưu trữ cục bộ và kho lưu trữ trung tâm bằng cách đặt tên kho lưu trữ trung tâm là “origin” bằng cách sử dụng câu lệnh: 

git remote add origin <đường dẫn đến repository>

Ví dụ ở đây mình sẽ sử dụng repository của Maker Viet: https://github.com/makerviet/Arduino-PS2X-ESP32-MakerbotA screenshot of a computer program

Sau khi tạo liên kết với Repository, chúng ta có thể kiểm tra các kết nối đã tạo bằng cách dùng câu lệnh:

git remote -v

Khi đã chuẩn bị xong, chúng ta chỉ cần sử dụng câu lệnh sau để tạo “clone” trong lần đầu sử dụng và cập nhật các thay đổi với kho lưu trữ cục bộ:

git pull origin master

A screenshot of a computer program Description automatically generated

Như vậy là các bạn đã nạp thành công. Trong trường hợp Git báo lỗi “fatal: refusing to merge unrelated histories”có thể do bạn đã xóa file .git trong thư mục làm việc hoặc có xung đột giữa các commit trong kho lưu trữ cục bộ và kho lưu trữ trung tâm. Để khắc phục lỗi, các bạn hãy dùng câu lệnh:

git pull origin master –allow-unrellated-histories

Câu lệnh này có chức năng hợp nhất tất cả các commit liên quan đến repository trở thành một bản giống trong file .git trên kho lưu trữ trung tâm.

Ngoài ra, bạn có thể nạp một nhánh khác của dự án bằng câu lệnh:

git pull origin <tên nhánh>

e. Đẩy các cam kết từ kho lưu trữ cục bộ lên kho lưu trữ trung tâm

Để có thể xuất bản các thay đổi cục bộ của bạn lên một kho lưu trữ trung tâm, bạn cần phải là Contributor của dự án để có quyền can thiệp vào các cập nhật của dự án. Sau khi bạn tích lũy được một số cam kết cục bộ và sẵn sàng chia sẻ chúng với các thành viên còn lại trong nhóm, bạn có thể đẩy chúng vào kho lưu trữ từ xa bằng cách sử dụng lệnh sau:

git push <tên remote>

Như ví dụ trên, khi chúng ta có một vài cam kết và chỉnh sửa quan trọng cần chia sẻ, các bạn có thể dùng câu lệnh “git push origin master”để đẩy phần công việc của mình lên kho lưu trữ trung tâm và chia sẻ với các thành viên khác.

f. Lệnh git status

Lệnh này được sử dụng để liệt kê tất cả các tệp đã bị sửa đổi, sẵn sàng để thêm vào kho lưu trữ cục bộ. Bạn có thể thử gõ:

git status

g. Lệnh touch và dir

Khi bạn muốn tạo một tệp tin mới bằng lệnh trong console, bạn có thể dùng câu lệnh sau:

touch <tên tệp tin>

Bạn có thể xem tên các tệp tin có trong thư mục làm việc bằng các sử dụng câu lệnh dir:A screenshot of a computer program Description automatically generated


Nguyễn Quốc Huy

Vietnam Steam Union

License.

This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.

This image has an empty alt attribute; its file name is 38uUlrOi--H7IaiAlFzPATEWmbKnlwvxxWShq91MTZP1j-VquVe_aAHuXc4a6waelmKKUu6MfnfxfmZe6ceg1vqhD0tgi-8ELz9K21ch-olUb3ueKTzXJvmAtOaitQgqQ198kG9QF7Kwz1p5zR_uFA