SlideShare a Scribd company logo
1 of 30
Quản lý source code với Git
tienhm@eway.vn
Nội dung
1. Git là gì ?
2. Thành phần và cách hoạt động
3. Cộng tác trong team
4. Versioning
Nội dung
1. Git là gì ?
2. Thành phần và cách hoạt động
3. Cộng tác trong team
4. Versioning
Khái niệm
- Là hệ thống quản lý phân tán phiên bản source code (distributed version-control
system) phát triển bởi Linus Torvalds vào năm 2005.
- Được thiết kế như một công cụ để các Lập trình viên có thể cộng tác cùng nhau
trên một source code.
- Hầu hết các công ty công nghệ đều đang sử dụng git.
Version Control System (VCS)
- Thay đổi là liên tục
- Đôi khi thay đổi hiện tại là không thoả
mãn, cần bỏ đi
- Đôi khi phiên bản trong quá khứ quan
trọng hơn
- Đôi khi có nhiều người cùng làm việc
trên 2 phiên bản khác nhau
→ Cần có một hệ thống quản lý phiên bản
để thống nhất về
Centralized VCS vs Distributed VCS
CVCS DVCS
Centralized VCS vs Distributed VCS
CVCS DVCS
Nội dung
1. Git là gì ?
2. Thành phần và cách hoạt động
3. Cộng tác trong team
4. Versioning
Cách chia vùng
- Git chia ra 2 môi trường: Môi trường
Phát triển (là môi trường phát triển
của lập trình viên), và môi trường
Server (GitHub, GitLab, …)
- Môi trường phát triển được chia thành
3 vùng: Working Directory, Staging
Area, Local Repository.
Clone
- Fork repo: https://gitlab.com/tienhm/git-
training
- Clone repo vừa fork về, trong đó sẽ có 2
file ví dụ pet.php và docs.md
Changes
- Đơn vị nhỏ nhất Git quản lý là đối tượng
Changes.
- Changes có 3 loại:
- added: Khi thêm 1 file mới
- deleted: Khi xoá 1 file
- modified: Khi thay đổi nội dung file
(changes dạng này có thể tính đến
đơn vị dòng)
- Working Area là nơi xuất phát của
Changes
- Các file trong Working Area sẽ được
đánh dấu là Tracked hoặc Untracked
(Untracked là file mới - trong repository
chưa có, git chưa biết về file này)
Add Changes
- Commit được cấu thành bởi một hoặc
nhiều Changes
- Commit cần đủ nhỏ để có thể mô tả
- Chỉ chọn các Changes phù hợp với
Commit
- Lưu ý: với Changes dạng modified, có
thể lựa chọn tới từng dòng, nên hãy cố
gắng tỉ mỉ khi lựa chọn.
Commit
- Không được viết Commit message quá
chung chung (Kiểu như “Update code")
- Nếu nhiều Commit cùng làm 1 việc và
phát sinh sau trong quá trình phát triển
thì cần dọn dẹp (Clean History)
- Nếu bạn có quá nhiều Commit cho 1 tính
năng thì: hoặc là task đó quá lớn, hoặc
là commit chưa đúng
- Có thể coi mỗi Commit là 1 bước để
hoàn thành task.
- Nếu dự án của bạn chia thành các
components, Commit nên chia thêm
theo chiều scope của components.
Push
- Push là bước để Remote Repository cập
nhật thay đổi từ Clients
→ Việc này có thể sinh ra Conflicts khi 2
người cùng sửa 1 dòng ở cùng 1 file (race
condition)
Nội dung
1. Git là gì ?
2. Thành phần và cách hoạt động
3. Cộng tác trong team
4. Versioning
Git Workflow
1. Centralized Workflow
2. Feature Branching
3. Forking Workflow
4. Git Flow
5. GitHub Flow
Luồng làm việc cơ bản
1. Bạn cần làm tính năng mới → Tạo branch tương ứng
2. Sau khi làm xong cần tự hoàn thiện code của mình (tự test nhiều case nhất có thể, xoá các đoạn
code debug, clean git history..)
3. Tạo yêu cầu merge
4. Sửa các góp ý phát sinh trong quá trình review
5. Merge code sau khi review
Branch (1)
- Cần chia ra 2 loại branch: private
branch và public branch
- Public Branch:
- Dùng chung bởi nhiều người
- Tương ứng với môi trường (ví dụ:
master tương ứng với production,
dev tương ứng với dev,...)
- Có bao nhiêu môi trường thì tạo
ngần ấy Public Branch
- History trên public branch là fact,
không ai được phá huỷ. Các hành
động merge trên Public Branch do
đó cần làm cẩn thận và theo quy
trình.
Branch (2)
- Cần chia ra 2 loại branch: private
branch và public branch
- Private Branch:
- Là branch để làm 1 tính năng - nên
chỉ do 1 người làm.
- Cần tuân thủ commit message
- Trước khi merge, có thể rebase để
dọn dẹp history (nếu cần)
Rebase (1)
- Rebase trước khi merge để tránh
conflict
- Rebase xong thì phải `git push -f` để
forced rewrite.
Rebase (2)
- Rebase sinh ra để Rewriting History. Mục đích là để có một History sạch sẽ. Giữ lại tri thức của dự
án về sau.
- Rebase rule:
- Public Branch: Không được rebase trên đây - do là branch dùng chung. Làm như vậy sẽ ảnh
hưởng tới nhiều người. Nếu bạn làm sai ở Private Branch mà vẫn merge vào Public Branch thì
quá trình Review code không hiệu quả.
- Private Branch: Luôn chủ động rebase trước khi merge. Nếu cần thiết, hãy thêm việc rebase
vào review checklist để chắc chắn nó được thực hiện trước khi merge. Hãy đảm bảo bạn
không đóng góp một đoạn code vào dự án mà không ai hiểu bạn muốn làm gì.
- Rebase quá nhiều không làm mọi việc tốt hơn vì nó làm cho tất cả những test trước đó của bạn là
vô nghĩa → Cần làm lại test
→ Tham khảo: https://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html
Dirty history
Clean up history
Merge Request Template
- Template cần các phần sau đây:
- Mô tả về feature: Để người review
không mất thời gian tìm hiểu lại vấn
đề
- Test plan: Để người review có thể
test nhanh nhất
- Review checklist: Để người review
không quên các mục quan trọng cần
làm
→ Lưu ý: Người tạo Merge Request (MR)
nên tự review cho mình trước khi assign cho
người khác. Vừa tăng tính hoàn thiện của
MR, vừa dễ dàng nhìn thấy khuyết điểm của
mình để sửa.
Nội dung
1. Git là gì ?
2. Thành phần và cách hoạt động
3. Cộng tác trong team
4. Versioning
Release
- Thống nhất điểm “sẵn sàng để release" trong cả team
- Ví dụ: merge vào master, build xong, ...
- Dịch vụ cần được đánh version khi release
- Nên tuân theo chuẩn Semantic Versioning
- Hãy viết change logs một cách tận tâm
- Cần nhất là các thay đổi sẽ release trong phiên bản này
- Nếu được, cần có thêm các bằng chứng như build status, test result...
Good changelogs
Bad changelogs
Tóm lại
- Tạo commit hợp lý
- Dọn dẹp git history trước khi yêu cầu merge (rebase)
- Review cần thận trước khi merge
- Đánh version khi đóng gói sản phẩm để release
- Viết changelogs cho các bản release
Git it

More Related Content

Similar to Git it

Domain Driven Design và Event Driven Architecture
Domain Driven Design và Event Driven Architecture Domain Driven Design và Event Driven Architecture
Domain Driven Design và Event Driven Architecture IT Expert Club
 
VNPAY Git Seminar
VNPAY Git SeminarVNPAY Git Seminar
VNPAY Git SeminarMr Slowly
 
DDD - DuyLV - VINID - 17.07.2019
DDD - DuyLV - VINID - 17.07.2019DDD - DuyLV - VINID - 17.07.2019
DDD - DuyLV - VINID - 17.07.2019Lê Văn Duy
 
Alfresco hệ quản lý nội dung doanh nghiệp nguồn mở
Alfresco   hệ quản lý nội dung doanh nghiệp nguồn mởAlfresco   hệ quản lý nội dung doanh nghiệp nguồn mở
Alfresco hệ quản lý nội dung doanh nghiệp nguồn mởHọc Huỳnh Bá
 
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)Levis Nickaster
 
Quản lý mã nguồn với GIT
Quản lý mã nguồn với GITQuản lý mã nguồn với GIT
Quản lý mã nguồn với GITZendVN
 
Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Dũng Đinh
 
How to write good code
How to write good code How to write good code
How to write good code Minh Hoang
 
Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...
Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...
Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...Nguyễn Thế Anh Giaxaydung.vn
 

Similar to Git it (20)

Guilde GIT.pptx
Guilde GIT.pptxGuilde GIT.pptx
Guilde GIT.pptx
 
Domain Driven Design và Event Driven Architecture
Domain Driven Design và Event Driven Architecture Domain Driven Design và Event Driven Architecture
Domain Driven Design và Event Driven Architecture
 
Dsd02 sta
Dsd02 staDsd02 sta
Dsd02 sta
 
VNPAY Git Seminar
VNPAY Git SeminarVNPAY Git Seminar
VNPAY Git Seminar
 
Git Basic
Git BasicGit Basic
Git Basic
 
DDD - DuyLV - VINID - 17.07.2019
DDD - DuyLV - VINID - 17.07.2019DDD - DuyLV - VINID - 17.07.2019
DDD - DuyLV - VINID - 17.07.2019
 
Programming
ProgrammingProgramming
Programming
 
Alfresco hệ quản lý nội dung doanh nghiệp nguồn mở
Alfresco   hệ quản lý nội dung doanh nghiệp nguồn mởAlfresco   hệ quản lý nội dung doanh nghiệp nguồn mở
Alfresco hệ quản lý nội dung doanh nghiệp nguồn mở
 
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
 
Quản lý mã nguồn với GIT
Quản lý mã nguồn với GITQuản lý mã nguồn với GIT
Quản lý mã nguồn với GIT
 
Salesforce CMS
Salesforce CMS Salesforce CMS
Salesforce CMS
 
Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1
 
How to write good code
How to write good code How to write good code
How to write good code
 
Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...
Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...
Ứng dụng phần mềm Quản lý tài liệu GXD quản lý tài liệu dự án xây dựng trên 1...
 
Tranning git
Tranning gitTranning git
Tranning git
 
Tranning git
Tranning gitTranning git
Tranning git
 
Process and thread
Process and threadProcess and thread
Process and thread
 
Git in real product
Git in real productGit in real product
Git in real product
 
Bdd
BddBdd
Bdd
 
Hdsd eclipse
Hdsd eclipseHdsd eclipse
Hdsd eclipse
 

Git it

  • 1. Quản lý source code với Git tienhm@eway.vn
  • 2. Nội dung 1. Git là gì ? 2. Thành phần và cách hoạt động 3. Cộng tác trong team 4. Versioning
  • 3. Nội dung 1. Git là gì ? 2. Thành phần và cách hoạt động 3. Cộng tác trong team 4. Versioning
  • 4. Khái niệm - Là hệ thống quản lý phân tán phiên bản source code (distributed version-control system) phát triển bởi Linus Torvalds vào năm 2005. - Được thiết kế như một công cụ để các Lập trình viên có thể cộng tác cùng nhau trên một source code. - Hầu hết các công ty công nghệ đều đang sử dụng git.
  • 5. Version Control System (VCS) - Thay đổi là liên tục - Đôi khi thay đổi hiện tại là không thoả mãn, cần bỏ đi - Đôi khi phiên bản trong quá khứ quan trọng hơn - Đôi khi có nhiều người cùng làm việc trên 2 phiên bản khác nhau → Cần có một hệ thống quản lý phiên bản để thống nhất về
  • 6. Centralized VCS vs Distributed VCS CVCS DVCS
  • 7. Centralized VCS vs Distributed VCS CVCS DVCS
  • 8. Nội dung 1. Git là gì ? 2. Thành phần và cách hoạt động 3. Cộng tác trong team 4. Versioning
  • 9. Cách chia vùng - Git chia ra 2 môi trường: Môi trường Phát triển (là môi trường phát triển của lập trình viên), và môi trường Server (GitHub, GitLab, …) - Môi trường phát triển được chia thành 3 vùng: Working Directory, Staging Area, Local Repository.
  • 10. Clone - Fork repo: https://gitlab.com/tienhm/git- training - Clone repo vừa fork về, trong đó sẽ có 2 file ví dụ pet.php và docs.md
  • 11. Changes - Đơn vị nhỏ nhất Git quản lý là đối tượng Changes. - Changes có 3 loại: - added: Khi thêm 1 file mới - deleted: Khi xoá 1 file - modified: Khi thay đổi nội dung file (changes dạng này có thể tính đến đơn vị dòng) - Working Area là nơi xuất phát của Changes - Các file trong Working Area sẽ được đánh dấu là Tracked hoặc Untracked (Untracked là file mới - trong repository chưa có, git chưa biết về file này)
  • 12. Add Changes - Commit được cấu thành bởi một hoặc nhiều Changes - Commit cần đủ nhỏ để có thể mô tả - Chỉ chọn các Changes phù hợp với Commit - Lưu ý: với Changes dạng modified, có thể lựa chọn tới từng dòng, nên hãy cố gắng tỉ mỉ khi lựa chọn.
  • 13. Commit - Không được viết Commit message quá chung chung (Kiểu như “Update code") - Nếu nhiều Commit cùng làm 1 việc và phát sinh sau trong quá trình phát triển thì cần dọn dẹp (Clean History) - Nếu bạn có quá nhiều Commit cho 1 tính năng thì: hoặc là task đó quá lớn, hoặc là commit chưa đúng - Có thể coi mỗi Commit là 1 bước để hoàn thành task. - Nếu dự án của bạn chia thành các components, Commit nên chia thêm theo chiều scope của components.
  • 14. Push - Push là bước để Remote Repository cập nhật thay đổi từ Clients → Việc này có thể sinh ra Conflicts khi 2 người cùng sửa 1 dòng ở cùng 1 file (race condition)
  • 15. Nội dung 1. Git là gì ? 2. Thành phần và cách hoạt động 3. Cộng tác trong team 4. Versioning
  • 16. Git Workflow 1. Centralized Workflow 2. Feature Branching 3. Forking Workflow 4. Git Flow 5. GitHub Flow
  • 17. Luồng làm việc cơ bản 1. Bạn cần làm tính năng mới → Tạo branch tương ứng 2. Sau khi làm xong cần tự hoàn thiện code của mình (tự test nhiều case nhất có thể, xoá các đoạn code debug, clean git history..) 3. Tạo yêu cầu merge 4. Sửa các góp ý phát sinh trong quá trình review 5. Merge code sau khi review
  • 18. Branch (1) - Cần chia ra 2 loại branch: private branch và public branch - Public Branch: - Dùng chung bởi nhiều người - Tương ứng với môi trường (ví dụ: master tương ứng với production, dev tương ứng với dev,...) - Có bao nhiêu môi trường thì tạo ngần ấy Public Branch - History trên public branch là fact, không ai được phá huỷ. Các hành động merge trên Public Branch do đó cần làm cẩn thận và theo quy trình.
  • 19. Branch (2) - Cần chia ra 2 loại branch: private branch và public branch - Private Branch: - Là branch để làm 1 tính năng - nên chỉ do 1 người làm. - Cần tuân thủ commit message - Trước khi merge, có thể rebase để dọn dẹp history (nếu cần)
  • 20. Rebase (1) - Rebase trước khi merge để tránh conflict - Rebase xong thì phải `git push -f` để forced rewrite.
  • 21. Rebase (2) - Rebase sinh ra để Rewriting History. Mục đích là để có một History sạch sẽ. Giữ lại tri thức của dự án về sau. - Rebase rule: - Public Branch: Không được rebase trên đây - do là branch dùng chung. Làm như vậy sẽ ảnh hưởng tới nhiều người. Nếu bạn làm sai ở Private Branch mà vẫn merge vào Public Branch thì quá trình Review code không hiệu quả. - Private Branch: Luôn chủ động rebase trước khi merge. Nếu cần thiết, hãy thêm việc rebase vào review checklist để chắc chắn nó được thực hiện trước khi merge. Hãy đảm bảo bạn không đóng góp một đoạn code vào dự án mà không ai hiểu bạn muốn làm gì. - Rebase quá nhiều không làm mọi việc tốt hơn vì nó làm cho tất cả những test trước đó của bạn là vô nghĩa → Cần làm lại test → Tham khảo: https://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html
  • 24. Merge Request Template - Template cần các phần sau đây: - Mô tả về feature: Để người review không mất thời gian tìm hiểu lại vấn đề - Test plan: Để người review có thể test nhanh nhất - Review checklist: Để người review không quên các mục quan trọng cần làm → Lưu ý: Người tạo Merge Request (MR) nên tự review cho mình trước khi assign cho người khác. Vừa tăng tính hoàn thiện của MR, vừa dễ dàng nhìn thấy khuyết điểm của mình để sửa.
  • 25. Nội dung 1. Git là gì ? 2. Thành phần và cách hoạt động 3. Cộng tác trong team 4. Versioning
  • 26. Release - Thống nhất điểm “sẵn sàng để release" trong cả team - Ví dụ: merge vào master, build xong, ... - Dịch vụ cần được đánh version khi release - Nên tuân theo chuẩn Semantic Versioning - Hãy viết change logs một cách tận tâm - Cần nhất là các thay đổi sẽ release trong phiên bản này - Nếu được, cần có thêm các bằng chứng như build status, test result...
  • 29. Tóm lại - Tạo commit hợp lý - Dọn dẹp git history trước khi yêu cầu merge (rebase) - Review cần thận trước khi merge - Đánh version khi đóng gói sản phẩm để release - Viết changelogs cho các bản release