Giới thiệu về Git - Phần 1

Git là gì?

Git là 1 hệ thống Distributed revision control (Distributed version control or Decentralized version control), tạm dịch là hệ thống quản lý source phân tán. Git được phát triển và phân phối trên Linux kernel bởi Linus Torvalds (Người tạo ra Linux) vào năm 2005 và ngày càng trở thành công cụ phổ biến để phát triển phần mềm.

Được phát triển khi có nhiều nhà phát triển nhân Linux bắt đầu từ bỏ BitKeeper (1 tool distributed revision control). Torvalds muốn 1 hệ thống phân tán mà sử dụng tương tự như BitKeeper nhưng vào thời điểm đó không có 1 service nào free như vậy cả, đặc biệt là với hiệu năng cao.

Ông mường tượng ra 1 hệ thống SCM (Source Control Management) chỉ trong vòng 3s sẽ thực thi được mọi thao tác để update mọi dữ liệu metadata của source code, project mà ông muốn sử dụng chính là project kernel của linux, project này mỗi lần để đồng bộ các dữ liệu maintain cần tới hơn 250 actions để thực thi, và ông muốn nó phải diễn ra chỉ trong vòng 3s. Ông đã nghĩ tới 1 hệ thống với những đặc tính sau:

Sử dụng Concurrent Versions System như 1 ví dụ mà sẽ không làm: nếu trong trường hợp có nghi vấn thì sẽ đưa ra những quyết định đối lập. Hỗ trợ phân tán (giống với BitKeeper) Tool đảm bảo chống lại những sai lầm, những vi phạm ngẫu nhiên hay những hành động thâm độc, phá hoại.

Torvalds gọi nó 1 cách châm biếm là git, git theo tiếng lóng của Anh có nghĩa là "người khó ưa" (unpleasant person). Ông nói "Tôi là 1 kẻ ngốc ích kỉ và tôi đặt tên tất cả các project của tôi đều ám chỉ tới tôi", giống như là ông đặt tên cho Linux (Linus là tên ông) vậy.

Lược sử

  • Bắt đầu được phát triển tháng 03/04/2005
  • Public 06/04/2005
  • Self-hosting vào 07/04/2005
  • Lần merge đầu tiên giữa nhiều branch diễn ra vào 18/04/2005
  • Torvals đã đạt được mục tiêu của ông vào 29/04/2005 khi ông thử kiểm với Linux Kernel trong 6.7s
  • Release cùng kernel 2.6.12 vào 16/06/2005
  • Release phiên bản 1.0 vào 21/12/2005

Đôi điều về git

  • Strong support for non-linear development: hỗ trợ mạnh mẽ phát triển không tuyến tính (phát triển song song các chức năng)
  • Distributed development: Hỗ trợ phát triển và lưu source 1 cách phân tán giống như Darcs, BitKeeper, Mercurial, SVK, Bazaar and Monotone. Người dùng sẽ có 1 bản copy trên local và sẽ sử dụng nó để phát triển, merger branch,...
  • Compatibility with existing systems/protocols: thích ứng được với những hệ thống và giao thức hiện có (HTTP,FTP,rsync,ssh, plain socket,…)
  • Efficient handling of large projects: có khả năng quản lý được những project lớn, git hoạt động nhanh, mạnh mẽ, hiệu suất cao.
  • Cryptographic authentication of history: xác thực history bằng mật mã.
  • Toolkit-based design: git được viết bằng C để nâng cao tốc độ thực thi.
  • Pluggable merge strategies: git có 1 model để meger không toàn vẹn và cũng hỗ trợ rất nhiều thuật toán để hoàn thiện quá trình merge, chỉ với trường hợp ko thể meger được thì mới cần người dùng phải tiến hành merge bằng tay.
  • Garbage accumulates unless collected:
  • Periodic explicit object packing

Sử dụng git cơ bản

Mô hình git

Như sơ đồ trên, git chia ra làm 2 môi trường là Remote và Local.

  • Remote: là môi trường lưu trữ và phân phối source của project.
  • Local: là môi trường làm việc local của nhà phát triển, nó là 1 bản sao của source trên remote, giúp ta commit code cũng như các thao tác khác 1 cách nhanh hơn so với CVS, SVN,…

Các lệnh git cơ bản

  • git clone <git_path>: clone source về local
  • git status: check branch status
  • git branch: list branch trên local
  • git branch -a: list branch cả trên local và remote
  • git checkout -b <branch_name>: tạo branch mới
  • git add <file_path1> <file_path2>: add file để commit
  • git commit -m "<commit_mess>": commit to local
  • git push <remote> <branch>: push to remote

3 Trạng thái trong git (local)

Mỗi tập tin trong Git được quản lý dựa trên ba trạng thái: committed, modified, và staged. Committed có nghĩa là dữ liệu đã được lưu trữ một cách an toàn trong cơ sở dữ liệu. Modified có nghĩa là bạn đã thay đổi tập tin nhưng chưa commit vào cơ sở dữ liệu. Và staged là bạn đã đánh dấu sẽ commit phiên bản hiện tại của một tập tin đã chỉnh sửa trong lần commit sắp tới.

Điều này tạo ra ba phần riêng biệt của một dự án sử dụng Git: thư mục Git, thư mục làm việc, và khu vực tổ chức (staging area).

Thư mục Git là nơi Git lưu trữ các "siêu dữ kiện" (metadata) và cơ sở dữ liệu cho dự án của bạn. Đây là phần quan trọng nhất của Git, nó là phần được sao lưu về khi bạn tạo một bản sao (clone) của một kho chứa từ một máy tính khác.

Thư mục làm việc là bản sao một phiên bản của dự án. Những tập tin này được kéo về (pulled) từ cơ sở dữ liệu được nén lại trong thư mục Git và lưu trên ổ cứng cho bạn sử dụng hoặc chỉnh sửa.

Khu vực staging là một tập tin đơn giản được chứa trong thư mục Git, nó chứa thông tin về những gì sẽ được commit trong lần commit sắp tới. Nó còn được biết đến với cái tên “chỉ mục” (index), nhưng khu vực tổ chức (staging area) đang dần được coi là tên tiêu chuẩn.

Tiến trình công việc (workflow) cơ bản của Git:

  1. Bạn thay đổi các tập tin trong thư mục làm việc.
  2. Bạn tổ chức các tập tin, tạo mới ảnh của các tập tin đó vào khu vực tổ chức.
  3. Bạn commit, ảnh của các tập tin trong khu vực tổ chức sẽ được lưu trữ vĩnh viễn vào thư mục Git.

Nếu một phiên bản nào đó của một tập tin ở trong thư mục Git, nó được coi là đã commit. Nếu như nó đã được sửa và thêm vào khu vực tổ chức, nghĩa là nó đã được staged. Và nếu nó được thay đổi từ khi checkout nhưng chưa được staged, nó được coi là đã thay đổi.

Trong Chương 2, bạn sẽ được tìm hiểu kỹ hơn về những trạng thái này cũng như làm thế nào để tận dụng lợi thế của chúng hoặc bỏ qua hoàn toàn giai đoạn tổ chức (staged).

Tham khảo