12/08/2018, 17:58

Hiểu rõ hơn về Git qua bài toán xây dựng kho hàng

Với người mới bắt đầu tìm hiểu và sử dụng git hẳn sẽ có rất nhiều thắc mắc, khó khắn hay cảm thấy mù mờ không rõ ràng về hệ thống quản lý phiên bản này, mình cũng từng như vậy nhưng sau một thời gian làm việc, vật lộn cùng nó thì đã hiểu ra được ít nhiều và muốn chia sẻ với mọi người sâu hơn, rõ ...

Với người mới bắt đầu tìm hiểu và sử dụng git hẳn sẽ có rất nhiều thắc mắc, khó khắn hay cảm thấy mù mờ không rõ ràng về hệ thống quản lý phiên bản này, mình cũng từng như vậy nhưng sau một thời gian làm việc, vật lộn cùng nó thì đã hiểu ra được ít nhiều và muốn chia sẻ với mọi người sâu hơn, rõ ràng hơn một chút về git qua một ví dụ lấy từ thực tế nhằm giúp mọi người tiếp cận vấn đề một cách tường minh nhất.

1. Đặt vấn đề

Hãy giả sử bạn là một tên lâm tặc ( hay người tiều phu =)) ), hàng ngày bạn phải đi chặt gỗ trong rừng, bạn chặt được rất nhiều gỗ để xây nhà, trong khi xây nhà có khi gỗ bị thiếu hụt do trộm cắp, do gỗ xấu mình muốn bỏ bớt đi, hay được thêm vào do công trình cần thêm nguyên liệu, rồi phát sinh thêm nhu cầu cần bỏ đi các chi tiết đã xây mà không ưng ý để xây lại kiểu khác, đôi khi lại muốn căn nhà về như hiện trạng ban đầu để xây mới cho đẹp đẽ, ... tất cả những nhu cầu quản lý và sửa đổi này nếu như làm thủ công, hàng ngày bạn phải đi kiểm tra xem gỗ có đủ hay không, muốn sửa chữa phải dỡ bỏ từng chút một rồi làm lại sẽ rất mất công. Đang bế tắc thì có một tay sale, chuyên bán các giải pháp quản lý cho chủ thầu đến làm quen vầ muốn hợp tác với bạn.

Tay này tên là git, hắn có một giải pháp rất thông minh và tiện lợi cho yêu cầu của bạn, đó là xây dựng một cái kho, cái kho này sẽ nằm trong khu rừng của bạn và đội ngũ tay chân của hắn sẽ quản lý mọi thứ cho bạn, chúng sẽ giám sát khởi điểm bạn có bao nhiêu gỗ, mỗi ngày thêm mới hay bớt đi bao nhiêu, hay hơn nữa, với mỗi lần bạn xây nhà nó sẽ lưu lại trạng thái căn nhà của bạn, nếu như sau khi xây tiếp mà xấu quá căn nhà có thể trở lại trạng thái như trước khi sửa đổi chỉ trong 1 nốt nhạc, bạn có thể có hàng trăm nghìn những trạng thái của căn nhà, để rồi trạng thái nào ưng nhất tốt nhất thì dùng thôi,... Tất cả tất cả những thông tin đó sẽ được cất giữ an toàn trong cái kho đã xây ra, có thể hiểu cái kho này là nơi lưu trữ mọi thay đổi về hiện trạng căn nhà cũng như các tài nguyên của bạn, đấy là các lợi ích chính của tay này, bên cạnh đó còn vô vàn các công cụ khác mà hắn cung cấp, phải nói thêm, git đến với mục tiêu phi lợi nhuận, vâng chính xác, hắn cung cấp cho chúng ta rất nhiều lợi ích như vậy nhưng hoàn toàn free, cứ thế mà xài thôi.

2. Git init

Ai từng dùng git chắc chắn phải ít nhất 1 lần dụng lệnh git init và chính xác mục đích của lệnh này đó là initialization khởi tạo một kho chứa gỗ, gỗ ở đây chính là source code của chúng ta, kho chưa này được lưu trong thư mục project dưới dạng một folder tên là .git, mọi người dùng ubuntu có thể Ctrl+H để show folder ẩn sẽ thấy trong thư mục project của mình có chưa 1 folder .git. Bên trong folder này sẽ chứa các file và folder nhằm mục đích quản lý toàn bộ code của chúng ta. Dưới đây là những gì chứa trong cái kho

Một số folder và file cần lưu ý:

  • HEAD
  • config: Nơi lưu giữ các thông tin cấu hình về cái kho của bạn, như tên của bạn, mail, ...
  • description: Trước đây thường dùng để lưu các thông tin mô tả của kho hàng.
  • hooks: Lưu các đoạn script dùng để chạy một số tiện ích trước hoặc sau khi chúng ta thao tác push/pull/rebase,...
  • info — exclude: Lưu thông tin các file mà bạn không muốn git kiểm soát ( nằm ngoài vùng kiểm soát )
  • objects: Đây là nơi thực sự chứa bản sao, hay các commit mà chúng ta tạo ra( có thể nói cách khác đây chính là vùng thực sự có gỗ trong cái kho của chúng ta) và cũng sẽ là nội dung chính của bài chia sẻ này

3. Git objects

Như đã đề cập ở trên folder objects trong thư mục .git là nơi chính lưu code của chúng ta vậy tổ chức bên trong folder này ra sao? Tại sao nó có thể lưu được nhiều thứ đến như vậy? ,.. ta sẽ cùng đi tìm hiểu ngay bây giờ đây.

Các bạn cần lưu ý là khi mới init để khởi tạo kho lưu trữ thì thư mục objects bên trong .git sẽ chỉ có 2 folder con là info và pack và chúng ta không cần quan tâm đến chúng. Các folder cần quan tâm chỉ được sinh ra khi bạn thực hiện commit lần đầu tiên. Đến đây sẽ có câu hỏi vậy commit là gì? Đây là 1 câu hỏi tưởng chừng như ai cũng biết nhưng thực sự không phải ai cũng biết             </div>
            
            <div class=

0