Basic: Git Visualization [2]

13 Aug 2020

Basic: Git Visualization [2]

#OK OK, do thật sự là hôm nay người không khoẻ, nên mình ngồi viết nhảm tiếp. Một ngày như này viết nhảm là siêu chuẩn rồi.

Cái seri này như đã nói mình sẽ đưa mọi người chạy qua từng thứ một của git theo cách mình cho là dễ hiểu nhất. Hôm nay Bachthing xin gửi tới các bạn phần tiếp theo và là đoạn vào đề của GIT.

#Chúng ta sẽ có các phần sau trong seri tổng quan :

  1. Git và các thành phần. Cấu trúc sẽ ở đây sau đó là tính năng.
  2. Git dưới góc nhìn tree, trunk, branch. Từ kiến trúc trên chúng ta sẽ nắm và suy ra các lệnh của git làm gì.
  3. Git và các lệnh. Sẽ là vài phần liền.
  4. Git chuyên sâu, control bằng gọi hash, edit =))) mong là chúng ta đủ chăm tới ngày này. ( đừng hi vọng gì cả ).

#Git và các khái niệm cơ bản. Bắt đầu.

(vì lười vẽ mới lên mình sẽ thó mấy quả ảnh giải thích cho nhanh =)) vì dù gì cái này họ viết thành sách hết rồi, đây tổng hợp giải thích dưới tiếng việt thôi)

Rồi. Ở phần 1 mình đã có nói qua về việc Git khác Svn chỗ Git chứa mọi thứ dưới dạng metadata trong file .git trong khi mọi thứ trong Svn là táng nguyên directory. Vìiii lý do đó, hôm nay chúng ta cùng đào sâu vào .git và cùng tìm hiểu xem nó hoạt động ra sao.

#Ô kê, sau đây là các đối tượng chính chúng ta cần phải biết :

#Vào luông cho nóng. Rồi phần này chúng ta sẽ quan tâm tới một folder trong .git là objects. 3 đối tượng dính dáng ở đây là BloB, Tree, Commit


#Chuyên sâu 1: Database Key-Value và Cơ Chế Lưu Trữ


Đầu tiên, git là một dạng database key-value, khu vực lưu trữ là .git/objects . Mỗi file trong code của bạn đại diện cho một blob, directory đại diện cho tree. Cơ chế sẽ dạng dạng này, xin trân trọng thông báo đây không phải là một quy trình chuẩn mà là trường hợp đầu tiên với một repo trống, để làm rõ phần tử thôi.

  1. Bạn chạy git init ra một repo trống huơ trống hoác.
  2. Rồi thì bạn tạo ra một file text hay file bất kì nào đấy, cộng thêm một directory nếu muốn.
  3. Add tụi nó vào index (index cơ bản là một file binary chứa tên file và SHA 1 code đóng vai trò key trong db key-value, nó sẽ show dựa theo HEAD, cái này để sau hoặc tiện thì google đi các bạn).
  4. Commit git. ok thao tác tay xong, cảm ơn bạn đã nhọc công. Tiếp theo git sẽ làm những việc sau với những file thay đổi hoặc mới, git sẽ mã hóa SHA-1 lấy một đoạn code 40 kí tự dài như cuộc đời cậu vàng làm key db, value khi này chính là toàn bộ dữ liệu của file.

Nó sẽ có key là dạng này 1cxdcv919d52e3c1b08f7924fa05d6de10187456 Và sau đó sẽ lưu dữ liệu ở vị trí .git/objects/1c/xdcv919d52e3c1b08f7924fa05d6de10187456 tách 2 kí tự đầu là sub-directory trong object. Tương tự với các đối tượng khác. Chúng ta có một đoạn mã SHA-1 mà chắc là chả thể trùng được đâu. Việc này dùng để so sánh nhanh xem file mới và file cũ có khác biệt không từ đấy sinh ra việc lưu trữ cây Git.

Khi đấy chúng ta sẽ có một cây đối tượng thế này, các bạn có thể dễ dàng nhìn được qua cái ảnh mình chôm trên mạng.

Rồi, hành động commit phía trên chúng ta đã tạo ra các thứ sau:

#Ô Kê, vài phút suy ngẫm. Từ cái mớ ở trên chúng ta có thể nhận ra một vài chuyện.

Để hình tượng hóa chúng ta sẽ nhìn các ảnh sau. Cũng là chôm trên mạng.

đây là một cây commit bình thường, đơn giản dễ hiểu với 2 sub-directory và 3 file. Nếu thay đổi dữ liệu file ở tầng sâu (blob dưới đáy rõ nét) nhất ta sẽ bị thay đổi thế này.

Tạo hẳn ra một file tầng đáy khác nhưng 2 file cũ vẫn được trỏ vào. Nếu bây giờ ta thay đổi dữ liệu file ngay tầng đầu thì sao (con blob ngay tree đầu). Ta sẽ có 3 version như sau.

  1. commit 1
  2. commit 2
  3. commit 3

#Đối tượng cuối tag.

Đúng rồi nó tag ra một cái đánh dấu tên tuổi địa chỉ số đo 3 vòng vào commit. Thế thôi, hết rồi. Thế là xong tư duy lưu trữ cơ bản của Git, nó lại là dễ. Đấy nhìn dễ ợt. Đây chính là sơ đồ cây của git trong cơ chế lưu trữ. Buổi sau thì bàn về HEAD, Branch và có thể là Work-Flow. Ờ tùy hứng.

#Thế nhé, chào.



/sw-load.js?v=e5ae5a1ed170f4499ac6292e7164b68528c51f6d6518cd75a49e6a6b737831d5728da21fc14dcbc7a91328e53858c6ff7195cc3fc8b25f0feeaef2af151d6686 /fireball.gif?v=569e393374f2af74d6c575090904aaf51e641e5eb5ea89ae7c7de01f7293abc165b3a7e8685690a8b951c778603fec98ae6822ff2f7ea86a536776966cb65d5d /favicon.ico?v=1a6495bbd14c74c75aa77e28420ce82a63372b28cd38c952b98403d8d112a9f76589bea299982ca27048215e661245f9d07294bddee7da377aaee76eee70c622 /favicon-16x16.png?v=7267c6f502a03c1e4df9d8136dcc6cd9e67e0b9644941d22ed34e4fe747580f95a65f77a183bb967c1ec60eecd0c298b2670d89a67a647391fb7d1501bcf0982 /favicon-32x32.png?v=5e23bffe691055b88067cbc8d11b96ce2a8dc5e25e49367803766a3cadbcfc7f05a62079bfa558d5e234c6a7455d21fc2960b196bda5cbd591bd4c2dbe67920d /icon-192x192.png?v=3820c1b1e6d755d2b7c2a04a65f0f1feef793b297f7ee995947137ccd8f73ec304457f6ce1df987a9a0a13ed7dacd203225505b832ccd2318b530ae53a55cebc /icon-512x512.png?v=de62ae905479fd813300d286ed1d2fe6bb6f6292623a5d918691642f6dd09a68943c69ed2a95a1820076919e69ff4fda668bb79e610ebc1d3200fedd7f634443 /apple-touch-icon.png?v=4718a090c66653794b3622234784e821a504ee526b6518f20cd10f6b27907566690892339830ede2ef9cb5fedb8a9796f02fb2610de868500c0720c1083013b7 /main.css?v=deafe9327da907780e2167b0c4b65cbafc26273324db10789fa06d4d9c2afced3cf2b5cb42a280190f42fc741f8a9c49bc830f0deb686be6acf12c3b0dbea86e /nerd-fonts.css?v=4b2ec75c55a664da78189dc20d4017cf5bc817cf3b60218a2446ba269ca4fd42c117352d5276363965f35fae32891efce751e0626b5281bae627f40d804a5679 /unstyle.css?v=b14bd48a2efbd463d973763aa3184c69aa02164c0891acacc9eab49ddd275f98f0050b4c31d2093e4671e7abe04f9459a041f0064384a90d97b8ff21b6824825 /langs.css?v=12474958ee314a9fde4704e1f5a032dc632d41f9461faca326ac284297766c4ceb07b45fec7fbc09fa72b0f21dcc64f0c31e64fc2e5e838b1d30f5fe540afd78 /syntax-theme-light.css?v=ccdddc2d2d88953c6d7d0376777b8409028ef625a7321dfa41619547b4f5eddbe89aa95ff5e7e2620da0ea13fbabebe2fd544620bc7e81e3294776b3425df48a /syntax-theme-dark.css?v=dfede4879841e4a58e5fc71115aa5f5b82e206d85eb771ff4e5a40a1d82621570aad2458f637365ae4370d9a1cf5070edc9765f7c2d4506e12e2ba3c6081ffd5 /sw-style.css?v=a0fa1e87fa2bb3e03d18cefc81ef5c8cfa58c6aa6eea0af223fa155e088bc5af22d32d3ee785ebd3fc26b4c49b70f0bd423f7d592a419a24e6d1e2cb720b7e05 /posts/page/2/ /posts/page/3/ /categories/ /categories/IT/ /categories/LIFE/ /tags/ /tags/Linux/ /tags/aircontrol/ /tags/cloud/ /tags/docker/ /tags/embedded/ /tags/git/ /tags/homelab/ /tags/kubernetes/ /tags/life/ /tags/oracle/ /tags/project/ /tags/review/ /tags/story/ /tags/system/ /tags/telegram/ /tags/zimaboard/ /posts/linuxstarter1/ /posts/review1/ /posts/iotproj1/ /posts/k8s1/ /posts/married/ /posts/terraform1/ /posts/cloud1/ /posts/dockeradv3/ /posts/dockeradv2/ /posts/dockeradv1/ /posts/homelab1/ /posts/git3/ /posts/embed1/ /posts/docker5/ /posts/itstory3/ /posts/docker4/ /posts/docker3/ /posts/docker2/ /posts/docker1/ /posts/telegrambot1/ /posts/git2/ /posts/git1/ /posts/itstory2/ /posts/virtualization1/ /posts/itstory1/ /whoami/ /posts/ trennui.jpg?v=d00c279cd8f340368f795c33d98a0541f5c39d1c19792ff6b863c6eec96ae1bb4795ea66ebeed5be73c5e2eb40ff3b5a57ea8ba359a173e9c485adf40806a728 caykhotrennui.jpg?v=69fe39128884c96777dc0e2b1b820246a84ec584ba62a7e1eee0c0bd3817f722e4397dbcc85078ffae08da3f4d7094bb66d650a3d67d2e300cf1a06ab18f0848 caytrennui.jpg?v=d27dddf71903dd4a733902097d3cb7ba3d72fd3f8a0ed1728549ae93fecb861d521f5c1bb9087c472e6af8563eacdec484d2c0a8f08f0c2225d1fffa2e8d6329 /icon-192x192.png?v=3820c1b1e6d755d2b7c2a04a65f0f1feef793b297f7ee995947137ccd8f73ec304457f6ce1df987a9a0a13ed7dacd203225505b832ccd2318b530ae53a55cebc /glitch.css?v=0b9b7f8691385df5b832251e9cf4c56d68cbcfc98c6e4c27e015f6fb29d2f0c18c358c98c0e7e0a1da9f263d6b355b811e49aac099b70889090912a5040f754a /sitemap.xml /search_index.en.json /search.js /elasticlunr.min.js?v=b9be63b71422cbfde9f14310b397d9a7092f2946bffec11811a831398ace978c1c592e9a578f1fa32041e6c0dde68657fe58d3c30b0eaa758c63c5fd45117336">