Git là một công cụ quản lý phiên bản và làm việc nhóm rất phổ biến hiện nay. Nhưng không vì thế mà ai cũng biết sử dụng thành thạo git, chứ chưa nói đến nhiều tính năng nâng cao khác. Sở dĩ nói như vậy là vì tôi đã tiếp xúc với nhiều câu chuyện về cách sử dụng git của đồng nghiệp, thoạt nhìn có vẻ họ không gặp vấn đề gì, nhưng trong sâu xa có nhiều câu lệnh khiến cho họ phải lúng túng. Ngay cả bản thân tôi cũng thế, có nhiều tình huống làm cho mình cảm thấy thật bối rối.
Bên cạnh những tính năng mà git trao cho ta qua dòng lệnh thì có thể nói đa phần chúng ta không sử dụng git đúng cách là từ trong lối suy nghĩ. Tưởng tượng nhiều người làm việc với git chỉ đơn thuần là nhớ một vài lệnh mà mình hay dùng, hoặc là lệnh đã được áp dụng trong các dự án từ rất lâu trước đó. Điều đó dẫn đến việc chỉ biết sử dụng lệnh mà không để ý đến lý do tại sao phải dùng lệnh đó.
Bắt đầu với những dự án cá nhân từ khi còn ngồi trên ghế nhà trường, gọi là dự án thì hơi quá, đúng ra thì đó chỉ là các opensource mà tôi nghịch ngợm, xào nấu lại theo sở thích. Mỗi lần phát hành phiên bản ổn định (có thể gọi là "go production", mặc dù hồi đó vẫn chưa có biết đến mấy khái niệm này) hoặc chuẩn bị làm một điều gì đó lớn mà có nguy cơ thay đổi logic, thì cách mà tôi làm là sao chép dự án ra rồi thực hiện thay đổi mới trên đó. Nếu tính năng thành công thì sẽ giữ lại, còn thất bại thì bỏ, coi như làm lại từ đầu.
Như thế, mỗi phiên bản ổn định sẽ được tôi nén lại, đặt cho một cái tên kèm với ngày nén. Từng ngày, số lượng các tệp nhiều lên đến một mức nào đó, tôi còn không biết tất cả chúng chứa những thay đổi gì, chỉ còn cách đoán mò. Hoặc sau này biết cách viết thêm những thay đổi vào trong một tệp README.md.
Đấy là cách mà tôi phát triển dự án khi chưa biết đến git. Có thể nhận thấy nhiều hạn chế khi làm theo cách này, phải sao chép mã liên tục và không thể nhìn lại được những thay đổi trước đó. Chợt nghĩ chẳng lẽ tất cả lập trình viên đều làm như thế này!?
Git xuất hiện! Nhớ lại lần đầu tiếp xúc với git, tôi vẫn chưa rõ khái niệm về nó, nếu làm theo hướng dẫn của Github, tôi đẩy được dự án lên trên kho lưu trữ trên này. Thật tuyệt vời, thế là giờ đây tôi đã có thể mang nó đi chia sẻ với người khác chứ không cần nén lại và gửi một cách thủ công nữa. Sau đó tôi học thêm được cách để tiếp tục đẩy mã mới lên và xem lại thay đổi trước đó.
Khi đi làm, tôi được biết nhiều hơn về cách sử dụng git và dùng git để làm việc nhóm, học nhiều hơn về gitflow và tư duy về cách mà git hoạt động, và cả những cuộc trao đổi với đồng nghiệp về git.
Thay vì nhớ máy móc cách dùng thì hãy dành thời gian để hình dung vấn đề mà git có thể giải quyết. Vì thế bài viết ngày hôm nay là chia sẻ của tôi về cách sử dụng git cho người mới bắt đầu.
Như trong câu chuyện đầu bài viết, nếu không có git, tôi cần phải làm rất nhiều công đoạn thủ công, phức tạp và rườm ra. Khi có git, tôi có thể dễ dàng "commit" mã mình viết ra tại mỗi thời điểm, sau đó phát triển tính năng và tiết tục commit.
Cách áp dụng git vào dự án cũng rất đơn giản, chỉ cần một lệnh init
.
$ git init
Commit được hiểu là hành động tạo ra cam kết cho một phiên bản mã tại thời điểm hiện tại. Giống như việc bạn sao chép mã ra thư mục khác và nén lại, nhưng thay vì làm thủ công như thế thì chỉ với một lệnh commit
, git làm mọi thứ cho chúng ta.
$ git commit -m "nội dung commit"
Sau khi commit, git lưu giữ lại nhật ký commit đã tạo. Để xem tất cả commit, chỉ cần dùng git log
.
$ git log
commit 98cd1bfde6dbe39f883324dad476f30dd836b3c4
Author: hoaitx <[email protected]>
Date: Mon Feb 26 23:50:23 2024 +0700
fix: một số lỗi giao diện
commit 7c24960175c652dabdf1f4615622b0375e81eea8
Author: hoaitx <[email protected]>
Date: Sun Feb 25 16:37:25 2024 +0700
feat: hiệu chỉnh giao diện
Nếu muốn xem lại mã tại thời điểm commit, chỉ cần checkout
đến commit đó, tất cả mã quay về thời điểm commit.
$ git checkout 98cd1bfde6dbe39f883324dad476f30dd836b3c4
Với dãy 98cd...
là hash của commit trong lịch sử commit.
Nhưng trước khi commit, git cần biết bạn thực hiện những thay đổi gì trên những file nào. Thông thường, chúng ta chỉ nên tạo ra một commit cho một tính năng cụ thể vừa làm xong, vì thế lý tưởng nhất là commit áp dụng cho tất cả các file vừa thay đổi.
$ git add .
Khi dự án chỉ nằm ở trong máy của bạn, nó đơn giản là một dự án cục bộ, nếu muốn chia sẻ dự án cho với người khác thì cần thêm một bước nữa là đẩy lên một cơ sở quản lý mã tập trung (remote repository).
Nếu không biết đến git, cách tôi vẫn làm là nén dự án lại, đặt tên cho nó bằng những cái tên bất chợt nghĩ ra được rồi tải lên đâu đó, gửi liên kết cho người nhận tải về rồi tiếp tục chỉnh sửa. Thử tưởng tượng một ngày mỗi người sửa bao nhiêu lần thì phải trao đổi với nhau như thế nào? Chưa kể họ còn sửa vào cả những đoạn mã mà chúng ta đang viết dở.
Github hay Gitlab là hai cái tên rất phổ biến giúp bạn đẩy mã lên và chia sẻ chúng. Ví dụ sau khi commit, đẩy mã lên bằng cách dùng lệnh push
.
$ git push
Nhưng trước đó, git cần biết chính xác dự án local đang gắn với cơ sở quản lý mã tập trung nào? Github hay Gitlab? Địa chỉ là gì?... Đừng lo lắng, vì khi tạo ra một kho lưu trữ (repository) trên Github, Gitlab nó sẽ chỉ cho bạn từng bước.
Ví dụ:
$ git remote add origin [email protected]:tonghoai/demo.git
Sau đó hãy đẩy dự án lên remote.
$ git push -u origin main
[email protected]:tonghoai/demo.git
chính là địa chỉ remote của dự án. Thiết lập kho remote chỉ cần làm một lần và sau đó chỉ cần push
mỗi khi tạo commit mới để đẩy mã mới nhất của bạn lên trên này.
Làm việc nhóm luôn đòi hỏi quy trình phức tạp hơn làm việc một mình rất nhiều.
Khi chỉ có một mình bạn làm việc trong dự án, bạn có thể thoải mái thêm sửa xóa và commit những thay đổi, tạo ra nhiều phiên bản khác nhau rồi đẩy mã lên remote. Bây giờ một người khác tham gia vào quá trình viết mã chung, điều đầu tiên họ cần làm là lấy được kho lưu trữ remote về.
$ git clone [email protected]:tonghoai/demo.git
Ngay lập tức dự án được kéo về trong thư mục demo
. Chỉ cần mở ra là đã có thể bắt đầu viết mã.
Nhưng chưa kịp viết gì thì bạn báo với họ "tôi vừa push code mới lên đó, pull về đi". pull
là hành động kéo những thay đổi mới nhất từ remote về local.
$ git pull
Nếu may mắn, bạn sẽ pull
code về thành công, còn khi có bất kỳ lỗi nào xuất hiện, chúc mừng bạn đã bắt đầu với quy trình làm việc phức tạp nhất quả đất!
Git có cơ chế giải quyết xung đột mã khi làm việc nhóm rất hiệu quả. Tuy nhiên trong bài viết này tôi sẽ chưa nhắc đến. Nếu bạn là một người mới làm quen với git, hãy dành thời gian để hiểu cách git hoạt động trước khi muốn "chế ngự" được con thủy quái này. Còn nếu bạn có thắc mắc gì, hãy để lại bình luận dưới bài viết nhé!
Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.
Bình luận (0)