SlideShare a Scribd company logo
1 of 25
Download to read offline
HOW	TO	USE	GIT
HƯỚNGDẪN SỬ DỤNG GIT	CHO NGƯỜI MỚI BẮT ĐẦU
Thanh Bùi
Khởi nghiệp, phát triển sản phẩm,
growth hacking.
Skype: thanhbuivan
Facebook: fb.com/mr.thanhbv
NHU	CẦU	THỰC	TẾ
• Cần	1	hệ	thống	lưu	trữ	tất	cả	các	thay	đổi	về	code	hàng	ngày.
• Để	sau	này	có	thể	xem	lại,	hoặc	phục	hồi	về	một	thời	điểm	
trong	quá	khứ.
• Hai	cái	đầu	thì	tốt	hơn	1	cái	đầu.
• Bất	kỳ	ai	đều	có	thể	tham	gia,	những	ng	khác	trong	team	biết	
chính	xác	từng	ng	đã	làm	gì,	thay	đổi	gì.
LỊCH	SỬ	- 1.	LOCAL	VERSION	CONTROL
• Các	phiên	bản	chỉ	lưu	trên	máy	
người	làm
• Sử	dụng	lệnh	rcs	để	tạo	ra	các	phiên	
bản
• Rất	khó	để	phối	hợp	trong	nhóm	
nhiều	người
• Đã	lỗi	thời	&	hiện	tại	không	còn	ai	
sử	dụng
LỊCH	SỬ	- 2.	CENTRAL	VERSION	CONTROL	SYSTEM
• Lịch	sử	các	version,	thay	đổi	được	lưu	trữ	
ở	1	server.
• SVN	là	hệ	thống	phổ	biến	nhất	theo	
phương	pháp	này.
• Vấn	đề	phát	sinh:
• Khi	server	bị	hỏng,	mất	hết	dữ	liệu.
• Không	ai	cộng	tác	được	với	những	
người	còn	lại,	không	lưu	đc	các	phiên	
bản	nếu	ko	kết	nối	đc	đến	máy	chủ
• Tốc	độ	chậm
LỊCH	SỬ	- 3.	DISTRIBUTED	VERSION	CONTROL	SYSTEM
• Giải	quyết	được	hết	các	vấn	đề	mà	các	
hệ	thống	cũ	hơn	mắc	phải.
• Các	hệ	thống	phổ	biến	sử	dụng	phương	
pháp	này:	Git,	hg…
GIỚI	THIỆU	GIT
• Tốc	độ	cực	nhanh	(Dữ	liệu	được	nén	và	giải	nén	ở	hai	đầu	trc	khi	
truyền	đi).
• Kiến	trúc	rất	đơn	giản,	ai	cũng	có	thể	học	&	dùng	được.
• Phân	tán	hoàn	toàn.
• Đã	được	kiểm	nghiệm	&	sử	dụng	trong	hầu	hết	các	công	ty.
• Cực	mạnh	trong	việc	phân	nhánh.
CÁCH	THỨC	GIT	HOẠT	ĐỘNG
BẮT	ĐẦU	SỬ	DỤNG	GIT
Có	2	cách:
• Tạo	1	repo	(kho	chứa)	mới	trên	local
• Sao	chép	1	repo	(kho	chứa)	từ	một	máy	khác	(máy	chủ,	bitbucket,	
github…)
3	CÁC	TRẠNG	THÁI	CỦA	1	FILE	TRONG	GIT
• Committed:	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:	Modified	có	nghĩa	là	bạn	đã	thay	đổi	
tập	tin	nhưng	chưa	commit	vào	cơ	sở	dữ	liệu
• 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).
CÁC	THAO	TÁC	CƠ	BẢN	TRONG	GIT
• git	add:	Thêm	một	file	(modified	hoặc	untracked)	vào	lần	commit	tiếp	theo
• git	commit:	Lưu	các	thay	đổi	vừa	tạo	ra	(bằng	lệnh	add)	vào	kho	chứa	(repo)	trên	
máy	mình
• git	pull	=	fetch	+	merge
• git	fetch:	Kéo	dữ	liệu	từ	kho	chứa	trên	server	xuống	kho	chứa	ở	máy	của	bạn
• git	merge:	Merge	dữ	liệu.	Mặc	định	là	merge	dữ	liệu	từ	lần	commit	gần	nhất	trên	
máy	(HEAD)	với	dữ	liệu	lần	commit	mới	nhất	trên	server
• git	push:	Đồng	bộ	hóa	kho	chứa	trên	máy	&	kho	chứa	trên	server	(bitbucket)
• git	log:	Xem	lại	lịch	sử	của	1	file/branch
GIT	ADD	&	GIT	COMMIT
GIT	FETCH
PULL	(FETCH	+	MERGE)
TRƯỜNG	HỢP	MERGE	MÀ	BỊ	CONFLICT
• Việc	bị	conflict	khi	merge	là	bình	thường.	Không	có	gì	phải	lo	lắng.
• Cẩn	thận	check	qua	lần	lượt	các	file	bị	conflict,	merge	thủ	công	bằng	tay.	(Sử	dụng	công	cụ	để	merge).
• Sau	khi	merge	xong	thì	mark	as	resolved	trong	Source	Tree.
• Tiếp	theo	là	commit	các	thay	đổi	đó.
PHỤC	HỒI
• git	checkout:	Lấy	về	file	từ	bất	kỳ	commit	nào	trong	local	repo	(sau	
khi	ng	dùng	sửa	thì	phải	tạo	branch	mới).
• git	reset.	Có	3	kiểu.
• hard:	Bỏ	qua	hết	các	thay	đổi	trong	máy	(xóa	hết	các	commit	
trc	đó).	Thư	mục	làm	việc	sẽ	giống	như	thư	mục	làm	việc	ở	
commit	vừa	reset.
• mixed:	Chỉ	reset	index,	giữ	lại	các	thay	đổi	hiện	tại.	Có	thể	
commit	lại.
• soft:	Giữ	lại	tất	cả.
.GITIGNORE
• Trong	thư	mục	làm	việc,	có	những	gì	mà	ko	biết	git	theo	dõi,	kiểm	
soát.	Ví	dụ:	các	file	tạm,	file	log,	tmp...
• =>	Có	thể	sử	dụng	.gitignore	để	thông	báo	cho	git	biết	là	ko	được	
track	các	file	này.
• .gitignore	nằm	ở	thư	mục	gốc	của	dự	án
BRANCH	– RẼ	NHÁNH	TRONG	GIT
• Nhánh	giúp	1	dự	án	được	tổ	chức	tốt	hơn.
• Có	nhiều	cách	tổ	chức	nhánh.	Nhưng	phổ	biến	nhất	là:
• 1	nhánh	dành	cho	các	phần	code	đã	chạy	ổn	định	(master,	production)
• 1	nhánh	dành	cho	các	phần	code	đang	phát	triển	(beta,	testing)
• Các	nhánh	topic:	dành	cho	từng	task,	issue,	thậm	chí	là	các	idea,	hướng	
phát	triển.	Sau	khi	developer	hoàn	thành	sẽ	merge	vào	nhánh	testing.	Sau	
khi	test	xong	thì	merge	tiếp	vào	nhánh	production.
VÍ	DỤ	VỀ	1	SƠ	ĐỒ	RẼ	NHÁNH	TRONG	GIT
VÍ	DỤ	VỀ	1	DỰ	ÁN	CỤ	THỂ
- Commit	C0	là	commit	khởi	tạo	dự	án.
- Đến	commit	C1	thì	phát	hệ	thống	có	lỗi	(issue	91)
- Tạo	branch	iss91	để	xử	lý	lỗi	đó.
- TRong	quá	trình	xử	lý	issue	91,	commit	C4	thì	lại	
phát	hiện	ra	1	cách	xử	lý	tốt	hơn	=>	tạo	branch	
iss91v2	để	phát	triển	theo	hướng	mới	trong	khi	
vẫn	duy	trì	làm	theo	cách	cũ	trên	iss91
- Trong	quá	trình	phát	triển	dự	án,	đến	commit	
C10	thì	nghĩ	ra	1	số	idea	rất	hay,	nhưng	bạn	
không	chắc	nó	có	đc	cả	team	đồng	ý	hay	không?
VÍ	DỤ	VỀ	1	DỰ	ÁN	CỤ	THỂ
- Bây	giờ,	giả	sử	bạn	chọn	cách	giải	quyết	thứ	hai	
(branch	iss91v2).	Issue	lúc	này	đã	được	fix	xong.
- Bạn	trình	bày	các	ý	tưởng	cho	đồng	nghiệp	và	
được	họ	đồng	ý	(branch	dumbidea)
- Lúc	này	bạn	có	thể	merge	branch	dumbidea	&	
branch	iss91v2	vào	branch	master	&	tiếp	tục	
công	việc	chính.
GIT	CLIENT:	SOURCE	TREE,	SMARTGIT,	TOWER
WORK	FLOW
• Mỗi	người	có	1	branch	để	làm	việc	riêng.
• Với	những	task	lớn,	cần	commit	nhiều	lần,	thời	gian	làm	việc	kéo	
dài	=>	tạo	riêng	branch	cho	nó.
• Commit	thường	xuyên	(không	nhất	thiết	phải	push).	Cứ	xong	1	
function,	1	phần	tính	năng	nào	đấy	thì	lại	commit.
• Khi	xong	một	tính	năng	thì	merge	lại	vào	branch	master	để	những	
người	khác	có	thể	fetch	về.
MỘT	VÀI	LƯU	Ý	VỚI	UNITY
• Change	Version	Control	Mode	to	Visible	Meta	Files
• Change	Asset	Serialization	Mode	to Force	Text
• Chỉ	1	người	làm	việc	trên	1	scene	tại	1	thời	điểm
• Sử	dụng	prefabs	để	lưu	game	object	thay	cho	các	file	scene.
UNITY3D	GITIGNORE
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
#	Autogenerated	VS/MD	solution	and	project	files
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
#	Unity3D	generated	meta	files
*.pidb.meta
#	Unity3D	Generated	File	On	Crash	Reports
sysinfo.txt

More Related Content

What's hot

Learning git
Learning gitLearning git
Learning gitSid Anand
 
Version Control System
Version Control SystemVersion Control System
Version Control Systemguptaanil
 
Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash CourseNilay Binjola
 
Version control
Version controlVersion control
Version controlvisual28
 
[Đồ án môn học] - Đề tài: Tìm hiểu Git và Github
[Đồ án môn học] - Đề tài: Tìm hiểu Git và Github[Đồ án môn học] - Đề tài: Tìm hiểu Git và Github
[Đồ án môn học] - Đề tài: Tìm hiểu Git và GithubMatt Colonel
 
A successful Git branching model
A successful Git branching model A successful Git branching model
A successful Git branching model abodeltae
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An IntroductionBehzad Altaf
 
Introduction to Version Control
Introduction to Version ControlIntroduction to Version Control
Introduction to Version ControlJeremy Coates
 
Version control system and Git
Version control system and GitVersion control system and Git
Version control system and Gitramubonkuri
 
Hướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ideHướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ideThiện Dương
 
Git workflows presentation
Git workflows presentationGit workflows presentation
Git workflows presentationMack Hardy
 
Giới thiệu tổng quan Agile-Scrum
Giới thiệu tổng quan Agile-ScrumGiới thiệu tổng quan Agile-Scrum
Giới thiệu tổng quan Agile-ScrumTam Pham Minh
 

What's hot (20)

Scrum
ScrumScrum
Scrum
 
An Introduction to Git
An Introduction to GitAn Introduction to Git
An Introduction to Git
 
Learning git
Learning gitLearning git
Learning git
 
Version Control System
Version Control SystemVersion Control System
Version Control System
 
Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash Course
 
Version control
Version controlVersion control
Version control
 
[Đồ án môn học] - Đề tài: Tìm hiểu Git và Github
[Đồ án môn học] - Đề tài: Tìm hiểu Git và Github[Đồ án môn học] - Đề tài: Tìm hiểu Git và Github
[Đồ án môn học] - Đề tài: Tìm hiểu Git và Github
 
A successful Git branching model
A successful Git branching model A successful Git branching model
A successful Git branching model
 
Git Pull Requests
Git Pull RequestsGit Pull Requests
Git Pull Requests
 
Git best practices workshop
Git best practices workshopGit best practices workshop
Git best practices workshop
 
Git undo
Git undoGit undo
Git undo
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Introduction to Version Control
Introduction to Version ControlIntroduction to Version Control
Introduction to Version Control
 
Git real slides
Git real slidesGit real slides
Git real slides
 
Intro to Git and GitHub
Intro to Git and GitHubIntro to Git and GitHub
Intro to Git and GitHub
 
Introduction to Git and Github
Introduction to Git and GithubIntroduction to Git and Github
Introduction to Git and Github
 
Version control system and Git
Version control system and GitVersion control system and Git
Version control system and Git
 
Hướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ideHướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ide
 
Git workflows presentation
Git workflows presentationGit workflows presentation
Git workflows presentation
 
Giới thiệu tổng quan Agile-Scrum
Giới thiệu tổng quan Agile-ScrumGiới thiệu tổng quan Agile-Scrum
Giới thiệu tổng quan Agile-Scrum
 

Sử dụng GIT cho người mới bắt đầu (Tiếng Việt)