31/08/2018, 15:32

Git là gì? Những lợi ích của việc dùng Git?

Git là một hệ thống quản lý phiên bản phân tán (distributed version control system). Git giống các hệ thống quản lý phiên bản khác ở chỗ nó cũng hỗ trợ quản lý code và lịch sử thay đổi. Tuy nhiên, Git ưu việt hơn vì có khả năng tách nhánh (branch), hỗ trợ rất tốt cho teamwork, vì những việc như ...

git-la-gi-logo

Git là một hệ thống quản lý phiên bản phân tán (distributed version control system). Git giống các hệ thống quản lý phiên bản khác ở chỗ nó cũng hỗ trợ quản lý code và lịch sử thay đổi. Tuy nhiên, Git ưu việt hơn vì có khả năng tách nhánh (branch), hỗ trợ rất tốt cho teamwork, vì những việc như phân chia task, tổng hợp code trở nên dễ dàng hơn nhiều.

Đọc ngay bài phỏng vấn này để biết:

  • Lợi ích của việc dùng Git?
  • Những tính năng hay nhất của Git có thể bạn chưa biết.
  • Cách sử dụng Git hiệu quả và các resource tham khảo.

Xem ngay việc làm Developer chất trên ITviec

Bài viết được thực hiện với sự đóng góp của:

  • Anh Jonathan Khor, với 13 năm kinh nghiệm lập trình. Jonathan từng trải qua nhiều vị trí bao gồm cả Software Engineer và Analyst Programmer. Hiện anh là Development Team Leader tại MedHealth.
  • Anh Vũ Thành Nhân, hiện đang làm tại bộ phận R&D của Vietnix.
  • Anh Vương Đức Hiền, Developer tại ITviec.
git-la-gi

Từ trái qua: Jonathan Khor, Vương Đức Hiền, Vũ Thành Nhân

Git là gì?

Git là một hệ thống quản lý phiên bản phân tán (distributed version control system). Nhờ Git, việc quản lý code và làm việc nhóm của developer trở nên đơn giản, thuận tiện hơn.

Để tìm hiểu thêm về Git là gì thì bạn có thể vào trang chủ của Git tại đây.

Sự giống/khác nhau giữa các hệ thống quản lý phiên bản khác và Git là gì?

1. Giống:

Git là một hệ thống quản lý phiên bản (viết tắt: VCS), Git cũng hỗ trợ:

  • Quản lý code và lịch sử thay đổi.
  • Làm việc nhóm.

Những cách trên đều rất thủ công, tốn resources và tiềm ẩn nhiều rủi ro. Các VCS (bao gồm Git) ra đời để khắc phục điều này.

2. Khác:

Git tiếp cận theo hướng phân tán (distributed approach) trong khi các VCS khác tiếp cận theo hướng tập trung (centralized).

Điểm khác biệt lớn nhất của Git là gì? Đó là khả năng tách nhánh (branch). Nhờ vậy, Git hỗ trợ rất tốt cho teamwork, vì những việc như phân chia task, tổng hợp code trở nên dễ dàng hơn nhiều. (Bạn có thể dùng từ khóa “git flow” để tìm hiểu thêm).

git-la-gi

3 lợi ích lớn nhất của việc dùng Git là gì?

1. Sắp xếp công việc tốt hơn. Nghĩa là, bạn có thể tập trung giải quyết từng task mà không phải bận tâm lo lắng cho những task liên quan.

2. Linh hoạt hơn khi phải làm cùng lúc nhiều task, bởi vì bạn có thể cấu trúc công việc dễ dàng hơn.

3. Tự tin hơn khi thử nghiệm những ý tưởng mới, vì bạn có thể tách biệt việc thử nghiệm với dự án chính. Điều này giúp nâng cao chất lượng code cũng như tính sáng tạo.

Git đã “vượt mặt” các VCS khác trong lĩnh vực quản lý phiên bản?

Đức Hiền: Dĩ nhiên rồi. Ngay cả Microsoft cũng đã bắt đầu dùng Git để host Windows source code. Đặc biệt, Git được “sinh sau đẻ muộn” hơn nhiều, cho nên tốc độ phát triển nhanh chóng của nó lại càng đáng kinh ngạc.

Tôi nghĩ, nguyên do phần lớn là vì Git miễn phí, và vì tiếp cận theo hướng phân tán. Nghĩa là, mọi người đều có thể bắt đầu sử dụng những chức năng cơ bản của Git mà không cần bất kì cơ sở hạ tầng server nào.

Thành Nhân: Cá nhân tôi nghĩ rằng, ở thời điểm hiện tại thì Git ưu việt hơn hẳn so với các hệ thống quản lý phiên bản tập trung như SVN.

Jonathan:

Tôi không biết nhiều về các VCS khác, nhưng nếu so sánh với SVN và TFS, thì rõ ràng là Git hơn hẳn.

Sự khác biệt cốt lõi trong cách quản lý storage và các nhánh của Git khiến cho việc merging cũng hoàn toàn khác.

Bên cạnh đó, cũng nhờ cách Git lưu trữ thông tin mà bạn có thể thực hiện vô vàn những điều thú vị để viết lại lịch sử commit.

remote-workflow-cua-git

Git hỗ trợ rất tốt cho làm việc nhóm

So với VCS khác, việc tiếp cận theo hướng phân tán của Git có trở ngại gì?

Thành Nhân: Trong điều kiện không thể kết nối thường xuyên đến remote repos, thì việc một thành viên push code mới có thể gây phức tạp cho người merge code và review.

Đức Hiền: Còn tôi cảm thấy một vài IDEs, ví dụ như Eclipse, được thiết kế để hoạt động với hệ thống CVS cũ kĩ, nhưng lại gắn cách dùng của Git lên. Vì vậy, việc tích hợp không được thực sự thuận tiện như những tính năng khác của Git.

(CVS – Concurrrent Versions System, hệ thống quản lý các phiên bản phần mềm mã nguồn mở từ những năm 1980).

Jonathan: Cá nhân tôi không thấy việc tiếp cận theo hướng phân tán của Git có trở ngại gì. Tuy nhiên, nếu cần nêu nhược điểm của Git, thì theo tôi đó là user interface (UI).

Là một người dùng lâu năm, tôi thấy UI của Git không đủ tốt và không cung cấp đủ những tính năng nâng cao mà tôi cần.

  • Chẳng hạn, giao diện để rebase một nhánh rất sơ sài.
  • Thêm nữa, Git cũng nên cải thiện việc hiển thị những thay đổi trên files hay change sets.
  • Thậm chí, những thứ đơn giản như mở file đang xem trong IDE cũng chưa thực sự tốt.

Tóm lại, nếu cần cải thiện điều gì thì tôi nghĩ Git nên tập trung vào phần UI.

Tính năng hay nhất song lại ít được dùng/biết đến nhất của Git là gì?

Đức Hiền: Có lẽ là Git Hooks. Có những đoạn script ở phía client hoặc server có thể được kích hoạt tự động khi bạn chạy một lệnh git.

Dĩ nhiên, nó sẽ không viết dùm unit tests “ngon lành cành đào” cho bạn, nhưng tôi nghĩ nó sẽ tạo động lực tốt hơn. Bởi vì test kĩ sẽ giúp đảm bảo rằng các tính năng bạn đang xây dựng không bị phá hỏng bởi những commit khác.

githooks-la-gi

Githooks là một tính năng thú vị của Git.

3 sai lầm phổ biến nhất khi dùng Git là gì?

Jonathan:

  • Không tìm hiểu các nguyên tắc cốt lõi của Git.
  • Nghĩ và dùng Git theo cách dùng các VCS trước đây.
  • Chưa hiểu về Git đã vội dùng.

Nếu là newbie, thì 3 điều cơ bản bạn cần tìm hiểu/ghi nhớ trước tiên: 1) Git là một đồ thị có hướng và không có vòng lặp. 2) Commit có tính bất biến. 3) Các nhánh chỉ là con trỏ. Mọi điều còn lại đều bắt nguồn từ đây.

Thành Nhân:

  • Không phân biệt được local repo, remote repo, vẫn áp dụng tư tưởng của SVN khi dùng Git.
  • Commit vô tội vạ khi chưa biết các biện pháp dọn lại commit tree, gây rối commit log.

Cách phòng ngừa tốt nhất là xem kỹ tài liệu về phần này, đồng thời test thử trên các dự án demo. Riêng phần commit log, trong team nên có thống nhất trước, hoặc nên nhờ người có kinh nghiệm hướng dẫn.

Đức Hiền:

  • Làm mọi thứ trên nhánh master.
  • Check in những files không thực sự liên quan vào một VCS.
  • Check in những thứ hoàn toàn không nên.

Sai lầm bạn từng phạm phải khi dùng Git là gì?

Jonathan: Khi reset một nhánh, tôi quên commit các thay đổi. Vậy là đổ xuống sông xuống biển mọi thứ đã làm. Cũng nhiều lắm đó :'(

Thành Nhân: Khi sử dụng git add -A, tôi đã vô tình add cả database credentials vào commit, và đã push commit đó lên remote repos.

Đức Hiền: Quên không check in code mới. Hậu quả là mấy ngày làm việc thành công cốc, chỉ vì không để ý đến cảnh báo của Git.

Bài học đúc rút cho bản thân?

Jonathan: Tìm hiểu kĩ các khái niệm và tính năng nền tảng của Git.

Bằng không, chúng ta sẽ vừa dùng Git vừa phải đoán mò, và không thể biết chắc chuyện gì sẽ xảy ra.

Đức Hiền: Phân nhánh thường xuyên.

Hãy chắc chắn là bạn có một nhánh staging với các tính năng đã được unit test đầy đủ trước khi nhập vào nhánh master.

Resource hướng dẫn sử dụng Git hiệu quả?

  • Pro Git bao quát mọi vấn đề về Git, gồm cả  lý thuyết và ví dụ. Điều tuyệt vời nhất là sách được dịch ra nhiều ngôn ngữ, trong đó có cả tiếng Việt.
  • Atlassian’s Git resources có một số resource rất hữu ích, kèm theo hình minh họa bắt mắt, giúp người dùng nắm bắt các khái niệm dễ dàng hơn.
  • GitHub’s Git tutorial hướng dẫn thực hành từng bước, giúp tìm hiểu Git một cách trực quan.
  • Git cheat sheet tóm lược những nội dung quan trọng nhất. Bạn có thể in ra để dùng.

Xem thêm một số bài viết liên quan:

  • GitHub là gì? 3 lợi ích của GitHub?
  • 7 source code repository website dành cho Developer.
  • Lập trình viên và những bài học kinh nghiệm xương máu.

Bạn bắt đầu tìm hiểu Git là gì và có vô vàn thắc mắc? Bạn là một chuyên gia về Git sẵn sàng chia sẻ kinh nghiệm với cộng đồng? Hoặc, bạn dùng các CVS khác và tin rằng chúng hay hơn Git?

Hãy cùng thảo luận ở phần bình luận phía dưới nhé!

Và tham khảo ngay việc làm Developer chất trên ITviec!

0