Cơ Bản về Git Tóm lại thì, Git là gì? Đây là một phần quan trọng để tiếp thu, bởi vì nếu bạn hiểu được Git là gì và các nguyên tắc cơ bản của việc Git hoạt động như thế nào, thì sử dụng Git một cách hiệu quả sẽ trở nên dễ dàng hơn cho bạn rất nhiều. Khi học Git, hãy cố gắng gạt bỏ những kiến thức mà có thể bạn đã biết về các VCS khác, ví dụ như Subversion và Perforce; việc này sẽ giúp bạn tránh được sự hỗn độn, bối rối khi sử dụng nó. Git nghĩ về thông tin và lưu trữ nó khá khác biệt so với các hệ thống khác, mặc dù giao diện người dùng tương đối giống nhau; hiểu được những khác biệt đó sẽ giúp bạn tránh được rất nhiều bối rối.
Trang 1Cơ bản về GIT
Version: 1.1 Author: Nguyen Dong Thang
1
<2/21/19>
Trang 2Tổng quan
• Mục đích:
• Thời lượng: 1.5h - 2h.
• Đối tượng: Devs, Tests
Trang 31.Giới thiệu về Git
Khái niệm cơ bản Vòng đời của file trong Git Branch trong Git
Cài đặt, cấu hình,…
2.Một số thao tác cơ bản trong Git
Tích hợp branch: Merge, Rebase Cherry-Pick
Shelve và UnShelve Change Merge Squash Commit,…
3.Hướng dẫn giải quyết một số tình huống thực tế
So sánh file, branch trong Git Show Annotate
Push Reject,…
Nội dung
Trang 4I Giới thiệu về Git
• Giới thiệu về git
• Khái niệm cơ bản
• Vòng đời của file trong git
• Branch trong git
• Cài đặt git
• Cấu hình git.
4
Trang 5Giới thiệu về Git
trở thành một trong các phần mềm quản lý mã nguồn phổ biến nhất Git là phần mềm mã nguồn mở được phân phối theo giấy phép công cộng GPL2 (Theo wikipedia.com)
5
Khi sử dụng Git, nên chú ý để tránh sự nhầm lẫn với
những khái niệm ở bên SVN.
Trang 6Khái niệm cơ bản
Đặc điểm của Git.
Nhanh.
Thiết kế đơn giản.
Hỗ trợ tốt cho “phát triển phi tuyến tính”.
Phân tán toàn diện.
Có khả năng xử lý các dự án lớn.
6
Trang 7Khái niệm cơ bản
Repository
Repository là nơi sẽ ghi lại trạng thái của thư mục và file
Remote repository: Là repository để chia sẻ giữa nhiều người và bố trí trên server.
Local repository: Là repository bố trí trên máy của bản thân người dùng.
7
Trang 8Khái niệm cơ bản
Commit
Để ghi lại việc 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 (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
8
Trang 9Vòng đời của file trong Git
Vòng đời của file trong Git
9
Trang 10Thể hiện như thế nào trên Android Studio?
Untracked và Tracked
10
Trang 11UnModified và Modified
Android studio phân biệt các status của file bằng màu của tên file
11
Đen: UnModified
Xanh dương: Modified
Xanh lá cây: UnModify
Đỏ: Untracked
Trang 12Tại một thời điểm, sẽ có một hoặc nhiều file ở đang bị thay đổi, nhưng bạn có thể chỉ muốn commit 1 số file nhất định mà không phải tất cả Staged chính là trạng thái mà file đã được đánh dấu để chuẩn bị cho lần commit tiếp theo
12
Trang 13II.Một số thao tác cơ bản trong git
Trang 14Branch là gì?
• Branch là cái dùng để phân nhánh và ghi lại luồng lịch sử của file trong git Nó đơn thuần là một con trỏ có khả năng di chuyển được, trỏ vào commit Tên nhánh mặc định của git là master Mỗi lần thực hiện commit, nó sẽ được ghi vào theo hướng tiến lên
• Khi đã tách branch, mọi thao tác sẽ không ảnh hưởng đến branch khác Có thể thao tác với nhiều branch trên cùng một repository
• Có thể hợp lại các branch đã tách bằng thao tác Merge
14
Trang 15Tạo branch mới
- Command: git branch <<name_bracnh>>
- Android studio: VCS ->Git ->Branches ->New branch
15
Trang 16Làm sao để biết bạn đang làm việc ở nhánh nào trên git?
Git giữ một con trỏ đặc biệt có tên là HEAD Trong git, đây là một con trỏ trỏ tới nhánh nội bộ mà bạn đang làm việc.
16
Trang 17Hiển thị các branch và di chuyển giữa các branch
Click to edit Master text styles
Trang 18Merge branch
Merge fast-forward: Ví dụ ta có branch bugfix phân nhánh ra từ branch master như hình:
Khi merge branch bugfix vào branch master vì lịch sử của branch bugfix sẽ bao gồm cả lịch sử của branch master nên con trỏ trên branch master chỉ di chuyển tiến thắng về phía trước là lấy được nội dung của branch bugfix Trong git, đây được gọi là merge fast-forward
18
Trang 19Merge non fast-forward: Trường hợp lịch sử của branch master vẫn đang tiến triển sau khi phân branch bugfix
Vì thế, merge commit đã lấy thay đổi của cả hai branch sẽ được tạo ra Đầu branch master sẽ di chuyển đến commit đó
19
Trang 20Rebase branch
Giống với ví dụ merge, sẽ có branch bugfix phân nhánh từ branch master như sơ đồ bên dưới.
Trường hợp sử dụng rebase ở đây rồi tiến hành tích hợp branch thì lịch sử sẽ giống như hình dưới.
20
Trang 21Trình tự Rebase branch.
Trước hết, khi rebase branch bugfix vào branch master, lịch sử branch bugfix sẽ được thay đổi đính kèm sau branch master Cho nên, lịch sử sẽ thành 1 đường như trong sơ đồ.
Nếu chỉ rebase không thôi thì vị trí đầu master vẫn cứ như vậy Vì thế, merge branch bugfix từ branch master rồi di chuyển master đến phần đầu của bugfix.
21
Trang 22Merge Vs Rebase
Cả merge và rebase đều là tích hợp lịch sử lại với nhau nhưng đặc trưng thì khác nhau.
Merge: Lịch sử nội dung thay đổi vẫn còn lại nhưng sẽ trở nên phức tạp hơn.
Rebase: Lịch sử sẽ trở nên đơn giản nhưng nội dung thay đổi từ commit ban đầu sẽ bị thay đổi Cho nên cũng có trường hợp rơi vào tình trạng commit gốc không hoạt động.
22
Trang 23Commit –amend
Các bạn có thể sử dụng amend commit khi mà bạn đã có 1 commit rồi nhưng muốn add thêm 1 hay nhiều file vào commit đó hoặc muốn update commit message
23
Trang 24Chú ý: Không rebase, commit-amend commit public
Việc rebase, commit-amend commit sẽ làm thay đổi lịch sử commit, nếu làm việc này với những commit đã chia sẻ trên server sẽ gây ra lỗi nghiêm trọng
24
Trang 25Cherry pick
Đặt tình huống, cả hai dự án NX413(origin/master) và dự án NX433 (origin/nx434Step2) đều cần fix bug 2981 Nhưng bug này đã được fix ở dự án NX413 rồi, việc cần làm bây giờ chỉ là apply phần source code fix bug đó lên dự án NX433 Lúc này chúng sẽ sẽ cần đến khái niệm cherry-pick.
25
Trang 26Khi thực hiện cherry-pick commit chúng ta cần chú ý tới:
Cherry-pick cài gì? Như ở hình bên dưới là pick commit 2981.
Cherry-pick vào đâu? Theo mặc định, source code được pick sẽ apply lên nhánh mà chúng ta đang đứng (HEAD)
Như vậy, để thao tác đúng pick bug 2981 lên dự án NX433 chúng ta cần phải chuyển về nhánh origin/nx434Step2 trước khi thực hiện cherry-pick.
26
Trang 27Merge Squash
Khi chỉ định lựa chọn này rồi merge branch thì commit mà tổng hợp tất cả commit của branch đó sẽ được thêm vào.
27
Trang 28Checkout nhiều nhánh để giải quyết công việc song song
Ví dụ bạn đang dở fix bug 1 nhưng PM yêu cầu bạn chuyển sang fix bug 2 urgent hơn Khi đó, bạn có thể commit những file thay đổi đã fix cho bug 1 trên nhánh Fixbu1 lại, rồi tạo branch mới là FixBug2 để fix bug 2.
Cách trên cũng có thể áp dụng trong trường hợp bạn là dev ở cùng lúc 2 dự án.
28
Trang 29Shelve and Unshelve changes
Tương tự ví dụ trên, nhưng lần này bạn không cần phải commit lại những file thay đổi nữa mà chỉ cần lưu lại (Shelve Change…) những file thay đổi và phục hồi (Unshelve change ) khi cần.
29
Trang 30III.Hướng dẫn giải quyết một số tình huống thực tế
• So sánh giữa các file, branch
• Show Annotate
• Show history log, git ref log
• Undo action in git
• Push Reject
30
Trang 31Git command trên Android Studio
Để sử dụng git commit trên AS, bạn cần phải config biến môi trường git trên máy.
31
Trang 32Compare in Git
So sánh file:
32
Trang 33So sánh branch:
33
Trang 34Git Annotate
Git Annotate: Để check lại lịch sử code của file, bạn có thể chọn show annotate của file lên VCS -> Git -> Annotate
34
Trang 35Git Log
• git log : Hiển thị lịch sử commit trong respository
• git shortlog : Nhóm các commit theo author
35
Trang 36Custom formatting
git log pretty=format:“Custom_format“
Tham khảo: https:// git-scm.com/docs/pretty-formats
36
Trang 37Một số lệnh khác:
git log –10 : Filter log theo số lượng
git log –after=“2016-12-22” : Filter theo ngày
git log –grep=“FGAB22NX433-2983” : Filter theo commit message
Tham khảo: https:// www.atlassian.com/git/tutorials/git-log
37
Trang 39Undo action trong Git
Nếu trong quá trình sử dụng, bạn thao tác 1 bước nào đó nhưng ko biết cách để hoàn tác Đừng lo, bạn có thể sử dụng lệnh
git reset hard HEAD@{x}
Trong đó X là chỉ số bước bạn muốn Undo lại
39
Trang 40Lỗi Push Reject
Commit thiếu file commit-msg
Thiếu file commit-msg trong folder \your_respository \.git\hooks nên không tạo được change-id cho commit -> Push reject
40
Trang 41Lỗi Push Reject
41
Push sai tên branch remote
Push commit lên nhánh remote thiếu prefix: refs/for/<name_branch>
Trang 42Giải quyết conflict code
Khi merge, git sẽ tích hợp tự động source code, nhưng cũng có những ngoại lệ
Phần phía trên đã được chia ra bằng ==== là local repository, phía dưới là nội dung chỉnh sửa của remote repository
42
Trang 44Tài liệu tham khảo
09e-BM/DT/FSOFT - ©FPT SOFTWARE - Corporate Training Center - Internal Use 44
• https://git-scm.com/book/vi/v1
• https://git-scm.com/book/en/v2
• http://backlogtool.com/git-guide/vn/
• https://www.atlassian.com/git/tutorials/
Trang 45Thank you
45