SlideShare a Scribd company logo
1 of 11
Report Tìm hiểu GIT: cách cấu hình và các lệnh git cơ bản mà Dev thường dùng.
1. Tại sao dùng GIT, công dụng của GIT
2. Dùng GIT thế nào
3. Cách config GIT kèm ảnh thực tế
4. Các lệnh git cơ bản thường dùng nhất
1.Tại sao dùng git, công dụng của git
- 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.
Trong Git, thư mục làm việc trên máy tính gọi là Working Tree.
- Ngoài ra, có một cách hiểu khác về Git đơn giản hơn đó là nó sẽ giúp bạn lưu lại các phiên
bản của những lần thay đổi vào mã nguồn và có thể dễ dàng khôi phục lại dễ dàng mà
không cần copy lại mã nguồn rồi cất vào đâu đó. Và một người khác có thể xem các thay
đổi của bạn ở từng phiên bản, họ cũng có thể đối chiếu các thay đổi của bạn rồi gộp phiên
bản của bạn vào phiên bản của họ. Cuối cùng là tất cả có thể đưa các thay đổi vào mã
nguồn của mình lên một kho chứa mã nguồn.
- Cơ chế lưu trữ phiên bản của Git là nó sẽ tạo ra một “ảnh chụp” (snapshot) trên mỗi tập tin
và thư mục sau khi commit, từ đó nó có thể cho phép bạn tái sử dụng lại một ảnh chụp nào
đó mà bạn có thể hiểu đó là một phiên bản. Đây cũng chính là lợi thế của Git so với các
DVCS khác khi nó không “lưu cứng” dữ liệu mà sẽ lưu với dạng snapshot.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. Trong Git, thư mục làm
việc trên máy tính gọi là Working Tree. Đại loại là như vậy.
2. Dùng git thế nào
a. Ảnh Chụp, Không Phải Sự Khác Biệt
- Git coi dữ liệu của nó giống như một tập hợp các "ảnh" (snapshot) của một hệ thống tập tin
nhỏ. Mỗi lần bạn "commit", hoặc lưu lại trạng thái hiện tại của dự án trong Git, về cơ bản Git
"chụp một bức ảnh" ghi lại nội dung của tất cả các tập tin tại thời điểm đó và tạo ra một tham
chiếu tới "ảnh" đó. Để hiệu quả hơn, nếu như tập tin không có sự thay đổi nào, Git không
lưu trữ tập tin đó lại một lần nữa mà chỉ tạo một liên kết tới tập tin gốc đã tồn tại trước đó.
Git thao tác với dữ liệu giống như
b. Phần Lớn Thao Tác Diễn Ra Cục Bộ
- Phần lớn các thao tác/hoạt động trong Git chỉ cần yêu cầu các tập tin hay tài nguyên cục
bộ - thông thường nó sẽ không cần bất cứ thông tin từ máy tính nào khác trong mạng lưới
của bạn. Nếu như bạn quen với việc sử dụng các hệ thống quản lý phiên bản tập trung nơi
mà đa số hoạt động đều chịu sự ảnh hưởng bởi độ trễ của mạng, thì với Git đó lại là một thế
mạnh. Bởi vì toàn bộ dự án hoàn toàn nằm trên ổ cứng của bạn, các thao tác được thực
hiện gần như ngay lập tức.
c. Git Mang Tính Toàn Vẹn
- Mọi thứ trong Git được "băm" (checksum or hash) trước khi lưu trữ và được tham chiếu tới
bằng mã băm đó. Có nghĩa là việc thay đổi nội dung của một tập tin hay một thư mục mà Git
không biết tới là điều không thể. Chức năng này được xây dựng trong Git ở tầng thấp nhất
và về mặt triết học được coi là toàn vẹn. Bạn không thể mất thông tin/dữ liệu trong khi
truyền tải hoặc nhận về một tập tin bị hỏng mà Git không phát hiện ra.
- Thực tế, Git không sử dụng tên của các tập để lưu trữ mà bằng các mã băm từ nội dung
của tập tin vào một cơ sở dữ liệu có thể truy vấn được.
d. Git Chỉ Thêm Mới Dữ Liệu
- Khi bạn thực hiện các hành động trong Git, phần lớn tất cả hành động đó đều được thêm
vào cơ sở dữ liệu của Git. Rất khó để yêu cầu hệ thống thực hiện một hành động nào đó mà
không thể khôi phục lại được hoặc xoá dữ liệu đi dưới mọi hình thức. Giống như trong các
VCS khác, bạn có thể mất hoặc làm rối tung dữ liệu mà bạn chưa commit; nhưng khi bạn đã
commit thì rất khó để mất các dữ liệu đó, đặc biệt là nếu bạn thường xuyên đẩy (push) cơ
sở dữ liệu sang một kho chứa khác.
e. Ba Trạng Thái
- Mỗi tập tin trong Git được quản lý dựa trên ba trạng thái: committed, modified, và staged.
Committed có nghĩa là dữ liệu đã được lưu trữ một cách an toàn trong cơ sở dữ liệu.
Modified có nghĩa là bạn đã thay đổi tập tin nhưng chưa commit vào cơ sở dữ liệu. Và
staged là bạn đã đánh dấu sẽ commit phiên bản hiện tại của một tập tin đã chỉnh sửa trong
lần commit sắp tới.
- Điều này tạo ra ba phần riêng biệt của một dự án sử dụng Git: thư mục Git, thư mục làm
việc, và khu vực tổ chức (staging area).
- Tiến trình công việc (workflow) cơ bản của Git:
+ Bạn thay đổi các tập tin trong thư mục làm việc.
+ Bạn tổ chức các tập tin, tạo mới ảnh của các tập tin đó vào khu vực tổ chức.
+ Bạn commit, ảnh của các tập tin trong khu vực tổ chức sẽ được lưu trữ vĩnh viễn
vào thư mục Git.
f. Cài đặt git trên linux
apt-get install git
3. Cách config git trên linux
- Vị trí lưu trữ các biến có thể dùng để config git:
/etc/gitconfig : Chứa giá trị cho tất cả người dùng và kho chứa trên hệ thống. Nếu
bạn sử dụng --system khi chạy git config, thao tác đọc và ghi sẽ được thực hiện trên tập tin
này.
~/.gitconfig : Riêng biệt cho tài khoản của bạn. Bạn có thể chỉ định Git đọc và ghi trên
tập tin này bằng cách sử dụng --global.
.git/config: trong tập tin .git của bất kỳ kho chứa nào.Giá trị trong này thuộc cấp cao
hơn giá trị config của file ở: /etc/gitconfig , do đó nó sẽ nhận giá trị trong này.
- Cách config dùng 1 số câu lệnh như sau:
git config --global user.name "nguyenthieu2102" ==> Config username
git config --global user.email nguyenthieu2102@gmail.com ==> Config email
git config --global core.editor nano ==> Config trình soạn thảo
git config --global merge.tool vimdiff ==> Config công cụ so sánh thay đổi
git config --list ==> Xem danh sách các cấu hình
git config user.name ==> Chỉ xem cấu hình của username
4. Các câu lệnh git cơ bản thường dùng nhất.
a. Trợ Giúp
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
Vd: git help config
b. Thực hành git
- Khởi tạo kho từ dự án mới: git init
- Theo dõi (track) từ dự án cũ, ta phải commit ngay để bắt đầu theo dõi:
git add *.c
git add . === git add --all
git add file_name
git commit -m "Phien ban dau tien, bát đầu theo dõi những file được thêm"
- Sao chép lại kho. Khi máy chủ lỗi, có thể nhận lại dữ liệu từ kho client.
git clone git://github.com/schacon/grit.git ==> Sẽ lưu trong folder tên là: grit (có
file .git trong đó)
- Muốn đổi tên folder có thể làm như sau.
git clone git://github.com/schacon/grit.git mygrit => Folder sẽ có tên là: mygrit
c. Kiểm Tra Trạng Thái Của Tập Tin
- Dùng lệnh : git status để check được có file nào đang bị thay đổi không,
- Vd: tạo file ReadMe rồi vứt vào folder đã có git.
- Rồi dùng lệnh git status ==> sẽ ra thông báo là file đó là untracked.
- giờ ta thêm bằng cách : git add ReadMe thì file sẽ về trạng thái staged
d. Bỏ qua các tập tin
- Tạo tệp: .gitignore
- Thêm các folder hoặc file không muốn up vào file này, quy tắc như sau:
+ Dòng trống hoặc bắt đầu với # sẽ được bỏ qua.
+ Các mẫu chuẩn toàn cầu hoạt động tốt.
+ Mẫu có thể kết thúc bằng dấu gạch chéo (/) để chỉ định một thư mục.
+ Bạn có thể có "mẫu phủ định" bằng cách thêm dấu cảm thám vào phía trước (!).
- Các regular expression thỏa:
+ Dấu sao (*) khớp với 0 hoặc nhiều ký tự;
+ [abc] khớp với bất kỳ ký tự nào trong dấu ngoặc (ở đây là a, b, hoặc c);
+ dấu hỏi (?) khớp với một ký tự đơn;
+ và dấu ngoặc có ký tự được ngăn cách bởi dấu gạch ngang ([0-9]) khớp bất kỳ ký
tự nào trong khoảng đó (ở đây là từ 0 đến 9).
- Đây là một ví dụ của .gitignore
# a comment - dòng này được bỏ qua
# không theo dõi tập tin có đuôi .a
*.a
# nhưng theo dõi tập lib.a, mặc dù bạn đang bỏ qua tất cả tập tin .a ở trên
!lib.a
# chỉ bỏ qua tập TODO ở thư mục gốc, chứ không phải ở các thư mục con subdir/TODO
/TODO
# bỏ qua tất cả tập tin trong thư mục build/
build/
# bỏ qua doc/notes.txt, không phải doc/server/arch.txt
doc/*.txt
# bỏ qua tất cả tập .txt trong thư mục doc/
doc/**/*.txt
e. Xoá Tập Tin
rm filename ==> Sẽ xóa khỏi khu làm việc nhưng sẽ không xóa khỏi .git (Kho local)
git commit -m "comment" ==> Sẽ xóa khỏi .git
git rm filename ===> Tổng hợp của 2 bước trên (Vừa xóa khỏi khu làm việc và local)
==> Khi ta muốn git không tracked 1 file nhưng mà ta lỡ add nó vào local. Thì ta có thể dùng
cách sau để khiến nó không theo dõi file đó, đồng thời không xóa file đó khỏi khu làm việc.
git rm --cached readme.txt
==> Cách trầy cối là: Xóa file đó khỏi khu làm việc và local rồi tạo file mới trong khu làm
việc. Sau đó thêm vào .gitignore thì sẽ không bị git tracked.
f. Xem Lịch Sử Commit
git log
==> Liệt kê các commit được thực hiện trong kho chứa đó theo thứ tự thời gian. Đó là,
commit mới nhất được hiển thị đầu tiên. Sẽ liệt kê từng commit với mã băm SHA-1, tên
người commit, địa chỉ email, ngày lưu, và thông điệp của chúng.
- Các tham số để hiển thị thông tin thật sự cần thiết như:
git log -p -2 ===> -p (diff của từng file được commit), -2 (Số commit giới hạn)
git log --stat ===> Hiển thị có bao nhiêu file được sửa chữa, thay đổi, remove.
git log --pretty=oneline ==> Hiển thị thay đổi trên 1 dòng.
gitk ==> Dùng giao diện để xem git log (sudo apt-get install gitk --> cài trên linux)
g. Recommit
- Nếu ta vội vàng commit, mà quên chưa add các file khác. Ta có thể dùng lệnh sau để khôi
phục lại commit đó. Điều duy nhất thay đổi là comment cho commit đó.
git commit --amend
Vd:
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
==> Giờ dùng: git log để check ==> Sẽ chỉ hiện ra 1 commit duy nhất.
h. Loại Bỏ Tập Tin Đã Tổ Chức (git status: sẽ giúp được)
- Nếu ta muốn commit 2 file thành 2 lần riêng biệt nhưng không may ta lại stage cho cả 2 file
với lệnh: git add --all
==> Để loại bỏ stage của 1 file ta dùng:
git reset HEAD file_name
==> Cái file_name này sẽ lại về dạng unstaged. Bây giờ ta có thể: git add file_name lại.
i. Phục Hồi Tập Tin Đã Thay Đổi (git status: sẽ giúp được)
- Nếu ta vô tình commit 1 file nào đó. Nhưng nhận ra file đã commit đó là không đúng. Mà
file ban đầu khi chưa bị chỉnh sửa mới đúng. ==> Để lấy lại được file ban đầu khi chưa
commit thì dùng:
git checkout -- file_name
- Nên nhớ là:
+ Bất cứ file nào đã commit, nếu bị mất, bị thay đổi, bị chỉnh sửa...đều có thể lấy lại
được trạng thái ban đầu.
+ File chưa được commit mà bị mất thì không thể lấy lại được.
+ Khi lấy lại trạng thái ban đầu, các trạng thái trước đó sẽ mất. Hãy cẩn thận vì nếu
không sẽ lại phải chỉnh sửa lại.
===> Tất cả các hoạt động bên trên là trên git local. Giờ ta sẽ nói về git remote từ xa.
a. Hiển Thị Máy Chủ (Máy mà ta cấu hình để lưu git trên internet)
git remote
git remote -v (để hiển thị địa chỉ mà Git đã lưu tên rút gọn đó)
b. Thêm Các Kho Chứa Từ Xa
git remote add [shortname] [url]
Vd:
git remote ==> origin
git remote add thieunv git://github.com/paulboone/ticgit.git
git remote -v
==> origin git://github.com/schacon/ticgit.git
==> thieunv git://github.com/paulboone/ticgit.git
==> giờ ta có thể dùng : thieunv như 1 câu lệnh hoàn chỉnh, nó tương đương với url hoàn
chỉnh.
==> Vd để lấy dữ liệu mà thieunv có mà ta chưa có trong kho ta dùng: git fetch thieunv
==> Nhánh chính của thieunv sẽ được truy cập như sau: thieunv/master
c. Truy Cập Và Kéo Về Từ Máy Chủ Trung Tâm
- Ta dùng git clone để theo dõi 1 nhánh nào đó từ xa.
- Ta thay đổi code trên local.
- Nhánh từ xa bị thay đổi bởi chủ của nó.
- Ta dùng lệnh : git pull nó sẽ lấy code mới từ nhánh từ xa và tự tích hợp với code mới mà
ta chỉnh trên local.
- Nếu dùng lệnh: git fetch [remote-name]
thì không được tự tích hợp vì: Lệnh fetch không tự động tích hợp, mà nó chỉ kéo tất cả dữ
liệu chưa có về thôi.
d. Đẩy Lên Máy Chủ Trung Tâm
git push [tên-máy-chủ] [tên-nhánh]
Vd: git push origin master
- Yêu cầu để chạy lệnh này:
+ Ta phải clone và theo dõi kho này.
+ Trước khi đẩy lên phải không có ai khác đẩy lên trước đó.
+ Nếu có ai khác đẩy lên trước đó ta phải clone của họ về trước và tích hợp của họ
vào của bạn. Sau đó mới đẩy lên được.
e. Kiểm Tra Một Máy Chủ Trung Tâm
git remote show [tên-trung-tâm]
Vd:
git remote show origin
f. Xóa Và Đổi Tên Từ Xa
git remote rename thieunv tonnytran
===> Đổi tên nhánh, để truy cập master nhánh đó thì dùng: tonnytran/master
git remote rm tonnytran
==> Xóa đi nhánh này (Không còn theo dõi nó nữa)
g. Phân Nhánh Trong Git
- Tạo nhánh mới: git branch testing
- Chuyển sang nhánh testing: git checkout testing
- Cách viết tắt của 2 câu lệnh trên: git checkout -b testing
- Chuyển về nhánh master: git checkout master
- Sau khi thấy ok thì merge nó vào nhánh master và xóa nhánh testing này đi:
git checkout master
git merge testing
git branch -d testing (Xóa nhánh)
- Khi merge có thể xảy ra mâu thuẫn. Ta dùng git status để kiểm tra.
unmerged: file_name
==> file_name này bị mâu thuẫn, ta phải tự sửa lại nó rồi git commit lại để merge.
h. Quản lý các nhánh
git branch ==> Xem được tất cả các nhánh (Dấu * có nghĩa là đang ở nhánh này)
git branch -v ==> Xem được các commit mới nhất trên từng nhánh
git branch --merged ==> Xem các nhánh đã tích hợp vào nhánh hiện tại.
(Các nhánh đã tích hợp thì có thể dễ dàng xóa nó đi bằng lệnh: git branch -d tên_nhánh )
git branch --no-merged ==> Xem các nhánh chưa tích hợp vào nhánh hiện tại
(Các nhánh chưa tích hợp này thì không xóa kiểu trên được. Nếu muốn bắt buộc xóa và
chấp nhận sự mất mát thì dùng: git branch -D tên_nhánh )

More Related Content

Similar to Git Basic

Git Instruction.docx
Git Instruction.docxGit Instruction.docx
Git Instruction.docxTrongNguyn1
 
Git Instruction.pdf
Git Instruction.pdfGit Instruction.pdf
Git Instruction.pdfTrongNguyn1
 
Ứng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTT
Ứng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTTỨng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTT
Ứng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTTMinhNguyen1493
 
Giới thiệu Git và một số tính năng cơ bản
Giới thiệu Git và một số tính năng cơ bảnGiới thiệu Git và một số tính năng cơ bản
Giới thiệu Git và một số tính năng cơ bảnHuy Nguyen Quang
 
Kỹ thuật lập trình Gadget
Kỹ thuật lập trình GadgetKỹ thuật lập trình Gadget
Kỹ thuật lập trình Gadgethanoipost
 
tài liệu Mã nguồn mở 03 he-thong-tep-linux-14
tài liệu Mã nguồn mở  03 he-thong-tep-linux-14tài liệu Mã nguồn mở  03 he-thong-tep-linux-14
tài liệu Mã nguồn mở 03 he-thong-tep-linux-14Thuyet Nguyen
 
template magento
template magentotemplate magento
template magentodvms
 
Hướng dẫn cài đặt & sử dụng git, github
Hướng dẫn cài đặt & sử dụng git, githubHướng dẫn cài đặt & sử dụng git, github
Hướng dẫn cài đặt & sử dụng git, githubnukeviet
 
Group policy cac thiet lap duoc luu nhu the nao
Group policy   cac thiet lap duoc luu nhu the naoGroup policy   cac thiet lap duoc luu nhu the nao
Group policy cac thiet lap duoc luu nhu the naoTrường Tiền
 
Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)laonap166
 
Golang web database3
Golang web database3Golang web database3
Golang web database3NISCI
 
Cài đặt quản trị hệ điều hành Ubuntu 12.0
Cài đặt quản trị  hệ điều hành Ubuntu 12.0Cài đặt quản trị  hệ điều hành Ubuntu 12.0
Cài đặt quản trị hệ điều hành Ubuntu 12.0Cường Nguyễn Tam
 
Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Dũng Đinh
 
Dang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unixDang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unixBảo Bối
 

Similar to Git Basic (20)

Git Instruction.docx
Git Instruction.docxGit Instruction.docx
Git Instruction.docx
 
Git Instruction.pdf
Git Instruction.pdfGit Instruction.pdf
Git Instruction.pdf
 
Ứng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTT
Ứng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTTỨng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTT
Ứng dụng Git/Github trong hoạt động nhóm cho sinh viên CNTT
 
Git it
Git itGit it
Git it
 
Tranning git
Tranning gitTranning git
Tranning git
 
Tranning git
Tranning gitTranning git
Tranning git
 
Hdubuntu
HdubuntuHdubuntu
Hdubuntu
 
Giới thiệu Git và một số tính năng cơ bản
Giới thiệu Git và một số tính năng cơ bảnGiới thiệu Git và một số tính năng cơ bản
Giới thiệu Git và một số tính năng cơ bản
 
Kỹ thuật lập trình Gadget
Kỹ thuật lập trình GadgetKỹ thuật lập trình Gadget
Kỹ thuật lập trình Gadget
 
tài liệu Mã nguồn mở 03 he-thong-tep-linux-14
tài liệu Mã nguồn mở  03 he-thong-tep-linux-14tài liệu Mã nguồn mở  03 he-thong-tep-linux-14
tài liệu Mã nguồn mở 03 he-thong-tep-linux-14
 
template magento
template magentotemplate magento
template magento
 
Hướng dẫn cài đặt & sử dụng git, github
Hướng dẫn cài đặt & sử dụng git, githubHướng dẫn cài đặt & sử dụng git, github
Hướng dẫn cài đặt & sử dụng git, github
 
Group policy cac thiet lap duoc luu nhu the nao
Group policy   cac thiet lap duoc luu nhu the naoGroup policy   cac thiet lap duoc luu nhu the nao
Group policy cac thiet lap duoc luu nhu the nao
 
Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)Linux Network Administration (LPI-1,LPI-2)
Linux Network Administration (LPI-1,LPI-2)
 
Golang web database3
Golang web database3Golang web database3
Golang web database3
 
Các lệnh shell cơ bản trong linux
Các lệnh shell cơ bản trong linuxCác lệnh shell cơ bản trong linux
Các lệnh shell cơ bản trong linux
 
Cài đặt quản trị hệ điều hành Ubuntu 12.0
Cài đặt quản trị  hệ điều hành Ubuntu 12.0Cài đặt quản trị  hệ điều hành Ubuntu 12.0
Cài đặt quản trị hệ điều hành Ubuntu 12.0
 
Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1
 
Linux security
Linux securityLinux security
Linux security
 
Dang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unixDang baitapthuchanh monhdh_unix
Dang baitapthuchanh monhdh_unix
 

Git Basic

  • 1. Report Tìm hiểu GIT: cách cấu hình và các lệnh git cơ bản mà Dev thường dùng. 1. Tại sao dùng GIT, công dụng của GIT 2. Dùng GIT thế nào 3. Cách config GIT kèm ảnh thực tế 4. Các lệnh git cơ bản thường dùng nhất 1.Tại sao dùng git, công dụng của git - 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. Trong Git, thư mục làm việc trên máy tính gọi là Working Tree. - Ngoài ra, có một cách hiểu khác về Git đơn giản hơn đó là nó sẽ giúp bạn lưu lại các phiên bản của những lần thay đổi vào mã nguồn và có thể dễ dàng khôi phục lại dễ dàng mà
  • 2. không cần copy lại mã nguồn rồi cất vào đâu đó. Và một người khác có thể xem các thay đổi của bạn ở từng phiên bản, họ cũng có thể đối chiếu các thay đổi của bạn rồi gộp phiên bản của bạn vào phiên bản của họ. Cuối cùng là tất cả có thể đưa các thay đổi vào mã nguồn của mình lên một kho chứa mã nguồn. - Cơ chế lưu trữ phiên bản của Git là nó sẽ tạo ra một “ảnh chụp” (snapshot) trên mỗi tập tin và thư mục sau khi commit, từ đó nó có thể cho phép bạn tái sử dụng lại một ảnh chụp nào đó mà bạn có thể hiểu đó là một phiên bản. Đây cũng chính là lợi thế của Git so với các DVCS khác khi nó không “lưu cứng” dữ liệu mà sẽ lưu với dạng snapshot.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. Trong Git, thư mục làm việc trên máy tính gọi là Working Tree. Đại loại là như vậy. 2. Dùng git thế nào a. Ảnh Chụp, Không Phải Sự Khác Biệt - Git coi dữ liệu của nó giống như một tập hợp các "ảnh" (snapshot) của một hệ thống tập tin nhỏ. Mỗi lần bạn "commit", hoặc lưu lại trạng thái hiện tại của dự án trong Git, về cơ bản Git "chụp một bức ảnh" ghi lại nội dung của tất cả các tập tin tại thời điểm đó và tạo ra một tham chiếu tới "ảnh" đó. Để hiệu quả hơn, nếu như tập tin không có sự thay đổi nào, Git không lưu trữ tập tin đó lại một lần nữa mà chỉ tạo một liên kết tới tập tin gốc đã tồn tại trước đó. Git thao tác với dữ liệu giống như
  • 3. b. Phần Lớn Thao Tác Diễn Ra Cục Bộ - Phần lớn các thao tác/hoạt động trong Git chỉ cần yêu cầu các tập tin hay tài nguyên cục bộ - thông thường nó sẽ không cần bất cứ thông tin từ máy tính nào khác trong mạng lưới của bạn. Nếu như bạn quen với việc sử dụng các hệ thống quản lý phiên bản tập trung nơi mà đa số hoạt động đều chịu sự ảnh hưởng bởi độ trễ của mạng, thì với Git đó lại là một thế mạnh. Bởi vì toàn bộ dự án hoàn toàn nằm trên ổ cứng của bạn, các thao tác được thực hiện gần như ngay lập tức. c. Git Mang Tính Toàn Vẹn - Mọi thứ trong Git được "băm" (checksum or hash) trước khi lưu trữ và được tham chiếu tới bằng mã băm đó. Có nghĩa là việc thay đổi nội dung của một tập tin hay một thư mục mà Git không biết tới là điều không thể. Chức năng này được xây dựng trong Git ở tầng thấp nhất và về mặt triết học được coi là toàn vẹn. Bạn không thể mất thông tin/dữ liệu trong khi truyền tải hoặc nhận về một tập tin bị hỏng mà Git không phát hiện ra. - Thực tế, Git không sử dụng tên của các tập để lưu trữ mà bằng các mã băm từ nội dung của tập tin vào một cơ sở dữ liệu có thể truy vấn được. d. Git Chỉ Thêm Mới Dữ Liệu - Khi bạn thực hiện các hành động trong Git, phần lớn tất cả hành động đó đều được thêm vào cơ sở dữ liệu của Git. Rất khó để yêu cầu hệ thống thực hiện một hành động nào đó mà không thể khôi phục lại được hoặc xoá dữ liệu đi dưới mọi hình thức. Giống như trong các VCS khác, bạn có thể mất hoặc làm rối tung dữ liệu mà bạn chưa commit; nhưng khi bạn đã commit thì rất khó để mất các dữ liệu đó, đặc biệt là nếu bạn thường xuyên đẩy (push) cơ sở dữ liệu sang một kho chứa khác. e. Ba Trạng Thái - Mỗi tập tin trong Git được quản lý dựa trên ba trạng thái: committed, modified, và staged. Committed có nghĩa là dữ liệu đã được lưu trữ một cách an toàn trong cơ sở dữ liệu. Modified có nghĩa là bạn đã thay đổi tập tin nhưng chưa commit vào cơ sở dữ liệu. Và staged là bạn đã đánh dấu sẽ commit phiên bản hiện tại của một tập tin đã chỉnh sửa trong lần commit sắp tới. - Điều này tạo ra ba phần riêng biệt của một dự án sử dụng Git: thư mục Git, thư mục làm việc, và khu vực tổ chức (staging area).
  • 4. - Tiến trình công việc (workflow) cơ bản của Git: + Bạn thay đổi các tập tin trong thư mục làm việc. + Bạn tổ chức các tập tin, tạo mới ảnh của các tập tin đó vào khu vực tổ chức. + Bạn commit, ảnh của các tập tin trong khu vực tổ chức sẽ được lưu trữ vĩnh viễn vào thư mục Git. f. Cài đặt git trên linux apt-get install git 3. Cách config git trên linux - Vị trí lưu trữ các biến có thể dùng để config git: /etc/gitconfig : Chứa giá trị cho tất cả người dùng và kho chứa trên hệ thống. Nếu bạn sử dụng --system khi chạy git config, thao tác đọc và ghi sẽ được thực hiện trên tập tin này. ~/.gitconfig : Riêng biệt cho tài khoản của bạn. Bạn có thể chỉ định Git đọc và ghi trên tập tin này bằng cách sử dụng --global.
  • 5. .git/config: trong tập tin .git của bất kỳ kho chứa nào.Giá trị trong này thuộc cấp cao hơn giá trị config của file ở: /etc/gitconfig , do đó nó sẽ nhận giá trị trong này. - Cách config dùng 1 số câu lệnh như sau: git config --global user.name "nguyenthieu2102" ==> Config username git config --global user.email nguyenthieu2102@gmail.com ==> Config email git config --global core.editor nano ==> Config trình soạn thảo git config --global merge.tool vimdiff ==> Config công cụ so sánh thay đổi git config --list ==> Xem danh sách các cấu hình git config user.name ==> Chỉ xem cấu hình của username 4. Các câu lệnh git cơ bản thường dùng nhất. a. Trợ Giúp $ git help <verb> $ git <verb> --help $ man git-<verb> Vd: git help config
  • 6. b. Thực hành git - Khởi tạo kho từ dự án mới: git init - Theo dõi (track) từ dự án cũ, ta phải commit ngay để bắt đầu theo dõi: git add *.c git add . === git add --all git add file_name git commit -m "Phien ban dau tien, bát đầu theo dõi những file được thêm" - Sao chép lại kho. Khi máy chủ lỗi, có thể nhận lại dữ liệu từ kho client. git clone git://github.com/schacon/grit.git ==> Sẽ lưu trong folder tên là: grit (có file .git trong đó) - Muốn đổi tên folder có thể làm như sau. git clone git://github.com/schacon/grit.git mygrit => Folder sẽ có tên là: mygrit c. Kiểm Tra Trạng Thái Của Tập Tin - Dùng lệnh : git status để check được có file nào đang bị thay đổi không, - Vd: tạo file ReadMe rồi vứt vào folder đã có git. - Rồi dùng lệnh git status ==> sẽ ra thông báo là file đó là untracked. - giờ ta thêm bằng cách : git add ReadMe thì file sẽ về trạng thái staged d. Bỏ qua các tập tin - Tạo tệp: .gitignore - Thêm các folder hoặc file không muốn up vào file này, quy tắc như sau: + Dòng trống hoặc bắt đầu với # sẽ được bỏ qua. + Các mẫu chuẩn toàn cầu hoạt động tốt. + Mẫu có thể kết thúc bằng dấu gạch chéo (/) để chỉ định một thư mục. + Bạn có thể có "mẫu phủ định" bằng cách thêm dấu cảm thám vào phía trước (!).
  • 7. - Các regular expression thỏa: + Dấu sao (*) khớp với 0 hoặc nhiều ký tự; + [abc] khớp với bất kỳ ký tự nào trong dấu ngoặc (ở đây là a, b, hoặc c); + dấu hỏi (?) khớp với một ký tự đơn; + và dấu ngoặc có ký tự được ngăn cách bởi dấu gạch ngang ([0-9]) khớp bất kỳ ký tự nào trong khoảng đó (ở đây là từ 0 đến 9). - Đây là một ví dụ của .gitignore # a comment - dòng này được bỏ qua # không theo dõi tập tin có đuôi .a *.a # nhưng theo dõi tập lib.a, mặc dù bạn đang bỏ qua tất cả tập tin .a ở trên !lib.a # chỉ bỏ qua tập TODO ở thư mục gốc, chứ không phải ở các thư mục con subdir/TODO /TODO # bỏ qua tất cả tập tin trong thư mục build/ build/ # bỏ qua doc/notes.txt, không phải doc/server/arch.txt doc/*.txt # bỏ qua tất cả tập .txt trong thư mục doc/ doc/**/*.txt e. Xoá Tập Tin rm filename ==> Sẽ xóa khỏi khu làm việc nhưng sẽ không xóa khỏi .git (Kho local) git commit -m "comment" ==> Sẽ xóa khỏi .git git rm filename ===> Tổng hợp của 2 bước trên (Vừa xóa khỏi khu làm việc và local) ==> Khi ta muốn git không tracked 1 file nhưng mà ta lỡ add nó vào local. Thì ta có thể dùng cách sau để khiến nó không theo dõi file đó, đồng thời không xóa file đó khỏi khu làm việc. git rm --cached readme.txt ==> Cách trầy cối là: Xóa file đó khỏi khu làm việc và local rồi tạo file mới trong khu làm việc. Sau đó thêm vào .gitignore thì sẽ không bị git tracked. f. Xem Lịch Sử Commit git log
  • 8. ==> Liệt kê các commit được thực hiện trong kho chứa đó theo thứ tự thời gian. Đó là, commit mới nhất được hiển thị đầu tiên. Sẽ liệt kê từng commit với mã băm SHA-1, tên người commit, địa chỉ email, ngày lưu, và thông điệp của chúng. - Các tham số để hiển thị thông tin thật sự cần thiết như: git log -p -2 ===> -p (diff của từng file được commit), -2 (Số commit giới hạn) git log --stat ===> Hiển thị có bao nhiêu file được sửa chữa, thay đổi, remove. git log --pretty=oneline ==> Hiển thị thay đổi trên 1 dòng. gitk ==> Dùng giao diện để xem git log (sudo apt-get install gitk --> cài trên linux) g. Recommit - Nếu ta vội vàng commit, mà quên chưa add các file khác. Ta có thể dùng lệnh sau để khôi phục lại commit đó. Điều duy nhất thay đổi là comment cho commit đó. git commit --amend Vd: git commit -m 'initial commit' git add forgotten_file git commit --amend ==> Giờ dùng: git log để check ==> Sẽ chỉ hiện ra 1 commit duy nhất. h. Loại Bỏ Tập Tin Đã Tổ Chức (git status: sẽ giúp được) - Nếu ta muốn commit 2 file thành 2 lần riêng biệt nhưng không may ta lại stage cho cả 2 file với lệnh: git add --all ==> Để loại bỏ stage của 1 file ta dùng: git reset HEAD file_name ==> Cái file_name này sẽ lại về dạng unstaged. Bây giờ ta có thể: git add file_name lại.
  • 9. i. Phục Hồi Tập Tin Đã Thay Đổi (git status: sẽ giúp được) - Nếu ta vô tình commit 1 file nào đó. Nhưng nhận ra file đã commit đó là không đúng. Mà file ban đầu khi chưa bị chỉnh sửa mới đúng. ==> Để lấy lại được file ban đầu khi chưa commit thì dùng: git checkout -- file_name - Nên nhớ là: + Bất cứ file nào đã commit, nếu bị mất, bị thay đổi, bị chỉnh sửa...đều có thể lấy lại được trạng thái ban đầu. + File chưa được commit mà bị mất thì không thể lấy lại được. + Khi lấy lại trạng thái ban đầu, các trạng thái trước đó sẽ mất. Hãy cẩn thận vì nếu không sẽ lại phải chỉnh sửa lại. ===> Tất cả các hoạt động bên trên là trên git local. Giờ ta sẽ nói về git remote từ xa. a. Hiển Thị Máy Chủ (Máy mà ta cấu hình để lưu git trên internet) git remote git remote -v (để hiển thị địa chỉ mà Git đã lưu tên rút gọn đó) b. Thêm Các Kho Chứa Từ Xa git remote add [shortname] [url] Vd: git remote ==> origin git remote add thieunv git://github.com/paulboone/ticgit.git git remote -v ==> origin git://github.com/schacon/ticgit.git ==> thieunv git://github.com/paulboone/ticgit.git ==> giờ ta có thể dùng : thieunv như 1 câu lệnh hoàn chỉnh, nó tương đương với url hoàn chỉnh. ==> Vd để lấy dữ liệu mà thieunv có mà ta chưa có trong kho ta dùng: git fetch thieunv ==> Nhánh chính của thieunv sẽ được truy cập như sau: thieunv/master c. Truy Cập Và Kéo Về Từ Máy Chủ Trung Tâm - Ta dùng git clone để theo dõi 1 nhánh nào đó từ xa.
  • 10. - Ta thay đổi code trên local. - Nhánh từ xa bị thay đổi bởi chủ của nó. - Ta dùng lệnh : git pull nó sẽ lấy code mới từ nhánh từ xa và tự tích hợp với code mới mà ta chỉnh trên local. - Nếu dùng lệnh: git fetch [remote-name] thì không được tự tích hợp vì: Lệnh fetch không tự động tích hợp, mà nó chỉ kéo tất cả dữ liệu chưa có về thôi. d. Đẩy Lên Máy Chủ Trung Tâm git push [tên-máy-chủ] [tên-nhánh] Vd: git push origin master - Yêu cầu để chạy lệnh này: + Ta phải clone và theo dõi kho này. + Trước khi đẩy lên phải không có ai khác đẩy lên trước đó. + Nếu có ai khác đẩy lên trước đó ta phải clone của họ về trước và tích hợp của họ vào của bạn. Sau đó mới đẩy lên được. e. Kiểm Tra Một Máy Chủ Trung Tâm git remote show [tên-trung-tâm] Vd: git remote show origin f. Xóa Và Đổi Tên Từ Xa git remote rename thieunv tonnytran ===> Đổi tên nhánh, để truy cập master nhánh đó thì dùng: tonnytran/master git remote rm tonnytran ==> Xóa đi nhánh này (Không còn theo dõi nó nữa) g. Phân Nhánh Trong Git - Tạo nhánh mới: git branch testing - Chuyển sang nhánh testing: git checkout testing - Cách viết tắt của 2 câu lệnh trên: git checkout -b testing - Chuyển về nhánh master: git checkout master - Sau khi thấy ok thì merge nó vào nhánh master và xóa nhánh testing này đi: git checkout master
  • 11. git merge testing git branch -d testing (Xóa nhánh) - Khi merge có thể xảy ra mâu thuẫn. Ta dùng git status để kiểm tra. unmerged: file_name ==> file_name này bị mâu thuẫn, ta phải tự sửa lại nó rồi git commit lại để merge. h. Quản lý các nhánh git branch ==> Xem được tất cả các nhánh (Dấu * có nghĩa là đang ở nhánh này) git branch -v ==> Xem được các commit mới nhất trên từng nhánh git branch --merged ==> Xem các nhánh đã tích hợp vào nhánh hiện tại. (Các nhánh đã tích hợp thì có thể dễ dàng xóa nó đi bằng lệnh: git branch -d tên_nhánh ) git branch --no-merged ==> Xem các nhánh chưa tích hợp vào nhánh hiện tại (Các nhánh chưa tích hợp này thì không xóa kiểu trên được. Nếu muốn bắt buộc xóa và chấp nhận sự mất mát thì dùng: git branch -D tên_nhánh )