+5

Git Tutorial P.1

Git là gì ?

alt

Git là tên gọi của một Hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS) là một trong những hệ thống quản lý phiên bản phân tán phổ biến nhất hiện nay. DVCS nghĩa là hệ thống giúp mỗi máy tính có thể lưu trữ nhiều phiên bản khác nhau của một mã nguồn được nhân bản (clone) từ một kho chứa mã nguồn (repository), mỗi thay đổi vào mã nguồn trên máy tính sẽ có thể ủy thác (commit) rồi đưa lên máy chủ nơi đặt kho chứa chính. Và một máy tính khác (nếu họ có quyền truy cập) cũng có thể clone lại mã nguồn từ kho chứa hoặc clone lại một tập hợp các thay đổi mới nhất trên máy tính kia.

Repository

Repository là nơi sẽ ghi lại trạng thái của thư mục và file. Trạng thái được lưu lại đang được chứa như là lịch sử thay đổi của nội dung. Bằng việc đặt thư mục muốn quản lý lịch sử thay đổi dưới sự quản lý của repository, có thể ghi chép lại lịch sử thay đổi của thư mục và file trong thư mục đó.

Remote repository và local repository

Đầu tiên, repository của Git được phân thành 2 loại là remote repository và local repository.

Remote repository: Là repository để chia sẻ giữa nhiều người và bố trí trên server chuyên dụng. Local repository: Là repository bố trí trên máy của bản thân mình, dành cho một người dùng sử dụng. Do repository phân thành 2 loại là local và remote nên với những công việc bình thường thì có thể sử dụng local repository và thực hiện trên toàn bộ máy sẵn có. Khi muốn công khai nội dung công việc mà bản thân đã làm trên local repository, thì sẽ upload lên remote repository rồi công khai. Thêm nữa, thông qua remote repository cũng có thể lấy về nội dung công việc của người khác.

Commit

Để ghi lại việc thêm/ thay đổi file hay thư mục vào repository thì sẽ thực hiện thao tác gọi là Commit.

Khi thực hiện commit, trong repository sẽ tạo ra commit (hoặc revision) đã ghi lại sự khác biệt từ trạng thái đã commit lần trước đến trạng thái hiện tại.

Các commit được ghi vào nối tiếp nhau theo thứ tự thời gian của lịch sử. Bằng việc lần theo commit này từ trạng thái mới nhất thì có thể hiểu được lịch sử thay đổi trong quá khứ hoặc nội dung thay đổi đó.

Working Tree và Index

Trên Git, những thư mục được đặt trong sự quản lý của Git mà mọi người đang thực hiện công việc trong thực tế được gọi là working tree.

Và trên Git, giữa repository và working tree tồn tại một nơi gọi là index. Index là nơi để chuẩn bị cho việc commit lên repository. Trên Git, khi đã thực hiện commit thì trạng thái sẽ không được ghi trực tiếp trong repository từ working tree, mà sẽ ghi trạng thái đã được thiết lập của index được xây dựng ở giữa đó. Vì thế, để ghi lại trạng thái của file bằng commit thì trước hết cần đăng ký file trong index.

Với việc chèn index vào giữa như thế này, có thể thực hiện commit không bao gồm những file không cần thiết trong working tree, hay có thể đăng ký chỉ một phần thay đổi của file trong index rồi commit.

Hướng dẫn sử dụng git

Vì môi trường hiện tại mình đang dùng git trên ubuntu nên mình sẽ hướng dẫn dùng git trên ubuntu sử dụng command line. À ở đây mình sẽ hướng dẫn dùng git qua github.com nên nếu chưa có tài khoản thì bạn nên tạo một cái để dùng nhé. Còn không thích có thể xem demo của mình của được 😛.

Ps: Trên Windown và trên Mac thì dùng git cũng tương tự như vậy. Mình có dùng cả trên Windown và không thấy khác biệt so với dùng trên Ubuntu.

Cài đặt môi trường

** Ubuntu ** Vào command line gõ

sudo apt-get update
sudo apt-get install git

Sau khi cài đặt xong, như vậy là đã có git ở trên máy tính của bạn. Tiếp đến ta sẽ tiến hành config hiển thị màu thị màu sắc cho command line, username và email của git

git config --global color.ui true
git config --global user.name "YOUR NAME"
git config --global user.email "[email protected]"

Tiến hành tạo ssh key và đăng ký ssh key cho máy tính và trên github

ssh-keygen -t rsa -C "[email protected]"

Sử dụng command sau để sao chép key ra rồi chép key vào đây.

cat ~/.ssh/id_rsa.pub

Để kiểm tra config ssh key đã thành công hay chưa ta hãy gõ lệnh

ssh -T [email protected]

Nếu command hiện ra thông báo như sau thì có nghĩa là ta đã config thành công github trên máy tính

Hi excid3! You've successfully authenticated, but GitHub does not provide shell access

** Note ** Trên Windown và Mac và cả Ubuntu bạn đều có thể lên trang chủ và tải về trực tiếp bộ cài của git tại đây.

Tạo repository mới

Đầu tiên ta tạo một thư mục mới mà sau này sẽ chứa mã nguồn của chương trình. Vào thư mục mới tạo và sử dụng command sau để khởi tạo git trên thư mục đó.

git init

Chạy xong lệnh trên, thì console sẽ hiển thị như sau :

Initialized empty Git repository in /home/likewise-open/FRAMGIA/michal.plachy/Downloads/GitTut/.git/

Sau khi chạy xong lệnh trên, thì từ bây giờ ta có thể chạy các lệnh git trực tiếp trên thư mục đó để commit, push lên remote, ...

Đầu tiên, ta hãy thử thêm một file văn bản (vd: gitdema.txt) mới vào trong thư mục. VD như sau:

Git á . Dễ ấy mà.

Tiếp đến ta sẽ chạy lệnh

git status

để xem các thay đổi file mà đã được thực hiện. Khi đó trên màn hình console sẽ hiển thị các file mà ta đã thực hiện thay đổi hay thêm mới, đã được add vào index hay chưa và cho ta biết ta đang ở nhánh nào nữa (lúc đầu nếu ta chưa làm gì thì sẽ là nhánh master).

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	gitdema.txt
	gitdema.txt~

nothing added to commit but untracked files present (use "git add" to track)

Để thêm file vào index thì ta thực hiện lệnh git add <file1> <file2> ... ở đây mình sẽ add file mới tạo của mình là 'gitdema.txt'. Bây giờ ta hãy thử add file gitdema.txt vào

git add gitdema.txt

rồi sau đó kiểm tra lại bằng lệnh

git status

Ah ha, bạn đã thấy sự khác biệt rồi chứ.

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   gitdema.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	gitdema.txt~

Tiếp theo ta hãy thực hiện lệnh commit để xác nhận thay đổi của mình

git commit -m "add file gitdema.txt"

Sau khi commit xong console sẽ đưa ra thông báo :

[master ccae71a] add file gitdema.txt
 1 file changed, 1 insertion(+)
 create mode 100644 gitdema.txt

ta thực hiện xem lại trạng thái trong Index và thấy file gitdema.txt không còn trong trạng thái sửa đổi nữa.

git status
On branch master
Your branch is ahead of 'origin/master' by 1 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	gitdema.txt~

nothing added to commit but untracked files present (use "git add" to track)

lại một lần nữa và sẽ thấy kêt quả là file gitdema.txt không còn ở trong trạng thái sửa đổi nữa. Để kiểm tra lại các commit ta có thể sử dụng git log để xem các commit ta đã thực hiện. Lệnh này sẽ cho ta biết các commit ai đã thực hiện vào thời điểm nào .

git log
commit 58f09066e1f0e8cdc7ff46677efea217e207aada
Author: michalplachyFramgia <[email protected]>
Date:   Tue Nov 24 11:18:35 2015 +0700

    add file gitdema.txt

Các thay đổi ta vừa thực hiện thì mới chỉ áp dụng trên repository(local). Và để áp dụng vào repository trên remote thì ta phải thực hiện thêm 1 lệnh để đẩy mã nguồn mới nhất của chúng ta lên repository trên remote. (git push <remote_name> <branch_name>). Tuy nhiên, lần đầu tiên trước khi push lên ta phải kiểm tra xem đã có remote trên git chưa (chắc chắn là chưa). Ở đây ta tiến hành add remote để cho git biết mã nguồn mà ta định cập nhập thuộc repository nào. Mình sẽ tạo một repository mới trên github có tên là GitTut. Sau khi tạo xong github sẽ chuyển đến trang hướng dẫn QuickSetup ta sẽ chạy dòng git remote ra vào command line và các dòng kia thì sẽ bỏ qua

echo "# GitTut" >> README.md git init git add README.md git commit -m "first commit" git remote add origin [email protected]:MichalPlachyFramgia/GitTut.git git push -u origin master

git remote add origin [email protected]:MichalPlachyFramgia/GitTut.git

Sau khi add remote xong thì ta đã có thể push lên remote được rồi. Ta tiến hành chạy lệnh sau :

git push origin master

Kết quả hiển thị trên console sẽ thông báo cho ta biết việc đẩy lên thành công :

Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 433 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To [email protected]:MichalPlachyFramgia/GitTut.git
   58f0906..ccae71a  master -> master

Sau khi chạy xong thì bạn có thể vào remote để xem các file đã thay đổi của mình. Mình có làm một repository demo ở dưới đây. Ở repository này chỉ có các file mình đã đẩy lên, nhánh và các commit. DEMO GIT REPOSITORY

Sau đó nếu bạn muốn lấy mã nguồn trên remote về máy tính để chỉnh sửa thì bạn chỉ cần chạy lệnh 'git pull <remote> <branch>'.

git pull origin master

Nếu mã nguồn trên local của bạn đã là mới nhất thì console sẽ thông báo Already up-to-date

From github.com:MichalPlachyFramgia/GitTut
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Hoặc nếu như mã nguồn của bạn chưa được cập nhập thì console sẽ đưa ra thông báo như sau:

remote: Counting objects: 10, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 10 (delta 2), reused 9 (delta 1), pack-reused 0
Unpacking objects: 100% (10/10), done.
From github.com:MichalPlachyFramgia/GitTut
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master

Vậy là chỉ với vài lệnh cơ bản là bạn đã có thể sử dụng git một cách cơ bản nhất. Còn để sử dụng git nâng cao hơn một chút thì chắc để sang tháng mình viết tiếp.

Tổng Kết

Sau đây là một số lệnh git cơ bản cho các bạn mới bắt đầu sử dụng. Dùng cho quen đã rồi mới tiếp đến còn nhiều lệnh nữa.

lệnh ý nghĩa note
git add <file1> thêm file vào index tree có thể thêm 1 hoặc nhiều file bằng cách thêmkhoảng trắng sau mỗi tên file . VD như: git add <file1> <file2> <file 3>. hoặc có thể thêm tất cả các file bằng git add ., git add -A hoặc git add --all.
git commit -m "<comment>" Thực hiện đánh dấu file ở index tree. ta có thể dùng git commit --am để thực hiện gộp commit mới này vào commit trước thành 1 commit. Tuy nhiên việc này làm thay đổi commit nên phải cẩn thận hơn.
git checkout -b <branch> Thực hiện tạo thêm nhánh mới Các nhánh được tạo ra thì tên phải khác nhau
git branch Thực hiện để xem các nhánh hiện có trên working tree
git checkout <file> thực hiện hủy bỏ các thay đổi với các file chưa được add vào index Nếu muộn hủy bỏ trên tất cả các file ta có thể thay tên file = . hoặc trên nhiều file thì cũng giống như git add ta thực hiện nhập tên các file và cách nhau bởi khoảng trắng.
git checkout <branch> thực hiện chuyển từ nhánh hiện tại sang nhánh mới
git push <remote> <branch> thực hiện đưa mã nguồn trong nhánh(branch) đã được commit lên remote. ngoài ra nếu các thực hiện sửa đổi có ảnh hưởng đến các commit thì sẽ cần phải thêm tùy chọn -f để xác nhận và thực hiện ghi đè commit trên remote.
git pull <remote> <branch> Thực hiện lấy mã nguồn trong branch trên remote về local.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.