Để có thể quản lý những dự án lớn, thì việc cần có một công cụ hỗ trợ đắc lực để quản lý source code là không thể thiếu. 1 trong những công cụ đó là Git. Bài viết này sẽ giới thiệu về Git và GUI client tool của Git, mà cụ thể là TortoiseGit.
Nội dung
1. Git là gì?
Git (Distributed Version Control System) là một Hệ thống quản lý phiên bản phân tán, ra đời vào 2005, tuổi đời như vậy là khá trẻ so với các SCM tiền nhiệm khác.
Dù vậy, hiện nay, việc sử dụng Git để quản lý source code đã trở nên vô cùng phổ biến. Theo một khảo sát vào năm 2018 của Stack Overflow, có gần 90% developer đang dùng Git cho dự án của mình tại thời điểm đó.
Một số đặc điểm nổi bật của Git:
- Dễ hiểu, dễ thao tác
- Gọn nhẹ nhưng rất mạnh mẽ
- So với các công cụ SCM khác như Subversion, CVS, Perforce và ClearCase, Git có nhiều tính năng vượt trội như:
- Quản lý branch dễ dàng tiện lợi
- Có vùng stage tiện lợi có thể review lại mọi thứ trước khi commit
- Đặc biệt là đặc tính phân tán của Git, chúng ta có thể áp dụng tùy ý bất kỳ quy trình công việc nào khi sử dụng vào dự án.
Bên cạnh đó, Git cũng có một số điểm yếu nhưng không đáng kể , trong đó điểm yếu được cho là lớn nhất đó là Git không phù hợp để quản lý các file có dung lượng lớn.
2. TortoiseGit là gì?
TortoiseGit là một Windows Shell Interface cho Git, được phát triển từ TortoiseSVN nổi tiếng. Điểm mạnh của TortoiseGit thì khá nhiều trong khi chỉ có một điểm yếu duy nhất, đó là chỉ chạy trên Windows mà thôi
Git CMS tuy nhẹ và mạnh mẽ nhưng lại được phân phối dưới dạng CLI nên nó vẫn là công cụ khó tiếp cận với những người không quen làm việc bằng cách gõ lệnh qua console. Đương nhiên, làm việc qua GUI luôn vui vẻ thân thiện hơn và đỡ phải nhớ nhiều command và params rắc rối hơn.
Danh sách các Git GUI tools: https://git-scm.com/downloads/guis/
Khi cài đặt xong TortoiseGit sẽ được tích hợp luôn vào menu của window với rất nhiều tính năng như hình dưới:
Bạn có thể tham khảo gallery ảnh tại đây để thấy được sự đồ sộ của TortoiseGit.
3. Những khái niệm cơ bản trong Git
3.1. Repository là gì?
Repository là nơi chứa toàn bộ source code và thông tin lịch sử thay đổi từng file của toàn bộ project.
Các thông tin lịch sử thay đổi sẽ được lưu trong thư mục ẩn .git
. Thư mục này nằm cùng với thư mục chứa source code (Working Directory).
Có 2 loại Repository:
- Remote repository: là repository để chia sẻ cho nhiều người. Thường nó sẽ nằm trên server chuyên dụng. Có một số dịch vụ nổi tiếng phân phối remote repo như: Github, Gitlab hay Bitbucket.v.v…
- Local repository: là repository nằm trên chính máy tính của bạn.
Với những công việc bình thường, bạn sẽ thao tác trực tiếp trên local repository. Sau đó, khi muốn public nội dung công việc, hay đơn giản là bạn phải giao kết quả công việc cho sếp thì lúc này bạn cần phải push lên remote repository.
Ngược lại, để lấy phần sửa đổi mã nguồn của các thành viên khác trong team, bạn cần phải pull từ remote repo về máy cá nhân của bạn.
3.2. Branch là gì?
Branch có thể hiểu là các nhánh của một Repository. Một repository có thể có nhiều nhánh, các nhánh này có thể merge vào nhau bất kỳ lúc nào.
Branch là một điểm mạnh của hệ thống git. Vì vậy nếu bạn sử dụng git mà chỉ có duy nhất một branch thì quả thật quá đáng tiếc.
Khi bạn tạo repository, bạn sẽ có một branch mặc định là master. Master branch sẽ chứa toàn bộ dữ liệu (mã nguồn, tài liệu…) của repository.
Sử dụng branch có rất nhiều lợi ích, mình chỉ liệt kê 2 lợi ích mà mình hay gặp nhất:
- Có thể phát triển, thử nghiệm các tính năng mới mà không ảnh hưởng tới tiến độ của dự án chính.
- Có thể tạo nhiều branch khác nhau, phát triển đồng thời, sau đó thì có thể merge vào master branch bất kì lúc nào. Ví dụ: dự án có một master branch, test branch, hay unstable branch…
Tất nhiên, mỗi một dự án lại có đặc thù riêng nên người ta có thể tạo branch cho phù hợp. Kết hợp giữa việc tạo branch và quy tắc merge các nhánh sẽ tạo ra git flow. Mình sẽ giải thích gitflow ở bên dưới nhé!
3.3. Thế nào là git stash?
Git stash được sử dụng để lưu lại những thay đổi khi bạn không muốn commit, tránh những commit rác khi thay đổi chưa hoàn thiện.
Git stash đặc biệt hữu ích trong trường hợp bạn muốn chuyển sang một branch khác mà lại đang làm dở ở branch hiện tại.
Bạn có thể git stash bao nhiêu lần cũng được. Mỗi lần tạo stash, git coi toàn bộ thay đối như một phần tử trong stack.
3.4. Git flow là gì?
Git Flow thực chất là quy tắc tạo và merge branch khi các thành viên trong team hoàn thành công việc của mình. Git flow có thể coi là một quy trình quản lý branch giúp cải thiện quá trình làm việc với git.
Tại sao lại cần đến Git flow?
Để hiểu tại sao người ta phải nghĩ ra quy trình git flow này, mình sẽ lấy một ví dụ cách quản lý source code git điển hình:
- Project leader sẽ tạo một repo có 1 master branch duy nhất.
- Các developer sẽ checkout master branch này về để làm việc. Tất cả các implement tính năng, fix bug đều được push lên nhánh này.
- Định kỳ project leader sẽ review và cherry-pick các commit vào master branch để build các bản release.
Từ tình huống trên, bạn có nhận ra nhược điểm lớn nhất của nó là gì không?
Nhược điểm lớn nhất chính là Project Leader sẽ gặp rất nhiều conflict khi cherry-pick vào master branch. Đặc biệt là với hot fix với nhiều vấn đề có khả năng ghi đè lên nhau.
Để khắc phục nhược điểm này, người ta nghĩ ra quy trình git flow. Về cơ bản, git flow sẽ tách master branch thành nhiều branchs: release, hotfix, develop, feature 1, feature 2,…
Phần này mình sẽ không đi chi tiết cách vận hành, quy tắc commit, merge nhánh trong git flow. Mục tiêu của phần này là để bạn biết đến sự tồn tại của git flow.
4. Lời kết
Qua bài viết này, chúng ta đã cùng nhau hiểu được những khái niệm cơ bản nhất của Git rồi. Nhờ có Git mà việc quản lý source code của team trở nên dễ dàng hơn rất nhiều.
Hi vọng các bạn sẽ tìm được kiến thức cần thiết cho mình qua bài này nhé.
Nguồn: https://vntalking.com/cach-quan-ly-source-code-git.html