Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Git Tag (Thẻ): Hướng dẫn Toàn tập

Gắn thẻ (Tagging) là tính năng dùng để theo dõi các điểm cụ thể trong lịch sử kho lưu trữ (repository) Git.

Theo thời gian, khi bạn làm việc với kho Git, bạn sẽ làm nhiều thay đổi cho codebase của mình. Trong Git, commit được dùng để theo dõi từng thay đổi riêng lẻ.

Tuy nhiên, nếu bạn muốn ghi lại một điểm trong lịch sử kho lưu trữ như một phiên bản (version), thì bạn sẽ muốn dùng tính năng gắn thẻ Git.

Hướng dẫn này sẽ thảo luận, với ví dụ, những kiến thức cơ bản về gắn thẻ và cách dùng lệnh git tag để làm việc với thẻ trong kho Git. Sau khi đọc hướng dẫn này, bạn sẽ thành thạo việc làm việc với thẻ trong Git.

Git Tagging (Gắn thẻ Git)

Thẻ (Tags) là tham chiếu (refs) trỏ đến một phần cụ thể của lịch sử kho Git.

Thẻ thường được lập trình viên dùng để ghi lại điểm cụ thể trong lịch sử repo để tạo bản phát hành phiên bản (version release). Ví dụ, khi lập trình viên sẵn sàng phát hành phiên bản mới của dự án, họ có thể tạo thẻ cho dự án.

Bản chất, thẻ là nhánh không thay đổi. Sau khi bạn tạo thẻ, sẽ không có commit nào được thêm vào lịch sử của thẻ. Thay vào đó, thẻ sẽ lưu ảnh chụp nhanh (snapshot) về cách kho lưu trữ trông như thế nào khi thẻ được thêm.

Có hai loại thẻ khác nhau được hỗ trợ trong Git. Chúng là:

  • Annotated tags (Thẻ có chú thích). Đây là thẻ được lưu như đối tượng đầy đủ trong cơ sở dữ liệu Git.
  • Lightweight tags (Thẻ nhẹ). Đây là thẻ chỉ là tên và con trỏ đến một commit.

Bây giờ chúng ta đã thảo luận cơ bản về Git tagging, hãy khám phá cách bạn có thể làm việc với thẻ trong Git.

Tạo Thẻ

Trước khi bạn có thể bắt đầu làm việc với thẻ trong Git, bạn cần tạo thẻ. Cú pháp tạo thẻ trong Git như sau:

git tag <tên>

Tham số "tên" tham chiếu đến tên thẻ bạn muốn tạo. Vì gắn thẻ thường dùng để theo dõi phiên bản dự án, bạn có thể muốn dùng tên như "v1.2" hoặc "beta-v0.9" cho thẻ.

Thẻ bạn tạo sẽ được áp dụng cho commit hiện tại bạn đang ở trong kho lưu trữ.

Annotated Tags (Thẻ có chú thích)

Annotated tag là thẻ lưu đối tượng đầy đủ trong cơ sở dữ liệu Git. Khi bạn tạo annotated tag, siêu dữ liệu như tên người tạo thẻ, email của họ và ngày thẻ được tạo sẽ được lưu.

Ngoài ra, annotated tag được lưu với thông điệp (message) cho thẻ. Nói chung, annotated tag được ưu tiên hơn lightweight tag vì siêu dữ liệu được lưu bởi annotated tag có thể có nhiều việc dùng sau này.

Ví dụ, nếu bạn muốn theo dõi ai chịu trách nhiệm về việc phiên bản hóa theo thời gian, bạn sẽ cần truy cập siêu dữ liệu được lưu bởi annotated tag.

Đây là cú pháp tạo annotated tag trong Git:

git tag -a <tên>

Cờ -a được dùng để nói cho Git tạo annotated tag. Tham số "tên" là tên thẻ chúng ta muốn tạo.

Sau khi chạy lệnh này, trình soạn thảo văn bản mặc định của hệ thống sẽ mở và yêu cầu chúng ta chèn thông điệp cho annotated tag của mình. Điều này xảy ra vì, như chúng ta đã thảo luận trước đó, annotated tag được lưu với thông điệp.

Thay vào đó, bạn có thể chỉ định thông điệp mà thẻ sẽ được tạo trực tiếp. Bạn có thể làm như sau:

git tag -a <tên> -m <thông_điệp>

Cờ -m được dùng để thêm thông điệp vào annotated tag. Giả sử chúng ta muốn tạo thẻ gọi là v1.9 với thông điệp "version 1.9". Chúng ta có thể làm như sau:

git tag -a v1.9 -m "version 1.9"

Khi chạy lệnh này, thẻ gọi là v1.9 sẽ được tạo với thông điệp đi kèm "version 1.9".

Chạy lệnh này thuận tiện hơn dùng git tag không có thông điệp, vì cách này cho phép chúng ta chỉ định thông điệp commit trực tiếp, mà không phải gõ vào trình soạn thảo mặc định xuất hiện khi bạn không chỉ định thông điệp commit.

Lightweight Tags (Thẻ nhẹ)

Để tạo lightweight tag, bạn nên dùng cú pháp git tag chuẩn chúng ta thảo luận trước đó. Giả sử bạn muốn tạo lightweight tag gọi là "v1.9.1". Bạn có thể làm như sau:

git tag v1.9.1

Lệnh này sẽ tạo lightweight tag gọi là v1.9.1. Khi bạn tạo lightweight tag, bạn không cần chỉ định thông điệp thẻ. Thay vào đó, checksum thẻ mới sẽ được tạo và lưu trong thư mục .git của dự án.

Liệt kê Thẻ của Dự án

Khi bạn làm việc trên dự án lớn, bạn có thể có một số phiên bản được gắn thẻ của kho lưu trữ. Để lấy danh sách thẻ lưu với dự án, bạn có thể dùng lệnh sau:

git tag

Lệnh này trả về danh sách thẻ. Đây là ví dụ đầu ra từ lệnh này:

v1.9.1 v1.9.0 v1.8.11 v1.8.10 v1.8.9 ...

Ngoài ra, cờ -l có thể dùng để lọc thẻ dùng với dự án. Ví dụ, nếu bạn muốn lấy danh sách mọi thẻ bắt đầu bằng "v1.8", bạn có thể dùng mã này:

git tag -l v1.8*

Trong lệnh của chúng ta, chúng ta chỉ định cờ -l, theo sau là "v1.8*". Điều này chỉ thị Git lấy danh sách tất cả thẻ bắt đầu bằng v1.8. Dấu sao (*) chỉ ra rằng thẻ được trả về có thể bao gồm bất kỳ ký tự nào sau "v1.8".

Đây là ví dụ đầu ra từ lệnh này:

v1.8.11 v1.8.10 v1.8.9 v1.8.8 ...

Như bạn thấy, tất cả thẻ trả về đều bắt đầu bằng "v1.8".

Checkout Thẻ

Lệnh git checkout có thể dùng để xem trạng thái kho lưu trữ trong commit với thẻ cụ thể. Ví dụ, giả sử bạn muốn xem kho lưu trữ khi nó ở v1.1. Bạn có thể làm như sau:

git checkout v1.1

Lệnh này di chuyển kho lưu trữ vào trạng thái "detached HEAD" (HEAD tách rời), nghĩa là bất kỳ thay đổi bạn làm sẽ không cập nhật phiên bản được gắn thẻ của repo. Thay vào đó, commit tách rời mới sẽ được tạo mà không liên kết với bất kỳ nhánh nào.

Sau khi chạy lệnh này, chúng ta có thể thấy codebase của chúng ta trông như thế nào trong commit được gắn thẻ v1.1.

Gắn thẻ cho Commit Cũ

Trong ví dụ trước, chúng ta đã thảo luận cách dùng hàm git tag để thêm thẻ cho phiên bản hiện tại của git bạn đang làm việc. Điều này là vì, theo mặc định, git tag sẽ tạo thẻ cho commit HEAD (commit bạn đang xem).

Tuy nhiên, bạn cũng có thể gắn thẻ cho commit cũ dùng lệnh git tag. Bạn có thể làm như vậy bằng cách chỉ định tham chiếu của commit cụ thể bạn muốn thêm thẻ.

Giả sử bạn muốn thêm thẻ cho commit cuối trong kho lưu trữ của mình. Để làm vậy, bạn trước hết cần chạy git log. Điều này cho phép bạn lấy danh sách các commit gần đây. Đây là ví dụ lệnh git log trong hành động (với cờ --pretty=oneline, giúp dễ thấy commit):

git log --pretty=oneline

Lệnh của chúng ta trả về:

8cd29ae5d04abbdbd856d2c2f55f2b82133903e8 Push new logging feature
2911aae73ed1dd372bcdf8f520b174c3817c818b Initialize logging feature
9646aa785211f3069ce01177da98e23b7890d859 Fix issue #342

Bây giờ, giả sử chúng ta muốn thêm thẻ cho commit "Fix issue #342". Chúng ta muốn thẻ này gọi là "v1.3". Chúng ta có thể thêm thẻ này dùng mã sau:

git tag -a v1.3 9646aa785211f3069ce01177da98e23b7890d859

Lệnh này thêm thẻ 1.3 vào commit chúng ta tham chiếu trong mã. Trong trường hợp này, chúng ta chỉ định SHA hash cho commit với thông điệp "Fix issue #342".

Thay thế Thẻ Cũ

Mỗi commit chỉ có thể có một thẻ. Nếu bạn quyết định muốn thay thế thẻ liên kết với commit bằng thẻ khác, bạn có thể làm vậy dùng git tag. Tuy nhiên, bạn phải chỉ định tùy chọn -f (force), sẽ ghi đè thẻ hiện có.

Giả sử chúng ta muốn thêm thẻ "v1.3.1" cho commit chúng ta thảo luận trong ví dụ trước. Nếu chúng ta thử làm vậy mà không dùng cờ -f, thông báo lỗi sẽ xuất hiện. Để thêm thẻ "v1.3.1" vào commit trước, chúng ta có thể dùng lệnh này:

git tag -a -f v1.3.1 9646aa785211f3069ce01177da98e23b7890d859

Lệnh này thêm thẻ "v1.3.1" vào commit và ghi đè thẻ "v1.3" chúng ta có trước đó.

Xóa Thẻ

Để xóa thẻ dùng git, bạn có thể dùng cờ -d. Giả sử chúng ta muốn xóa thẻ "v1.3" từ kho lưu trữ. Chúng ta có thể làm như sau:

git tag -d v1.3
git tag

Mã của chúng ta trả về:

v1.4 v1.2 v1.1

Lệnh đầu tiên xóa thẻ v1.3 từ kho lưu trữ. Lệnh thứ hai trả về danh sách thẻ. Như bạn thấy, khi lấy danh sách thẻ, thẻ v1.3 bị thiếu. Điều này là vì chúng ta đã xóa thẻ dùng cờ -d.

Kết luận

Gắn thẻ là tính năng quan trọng của Git được lập trình viên dùng để theo dõi các phiên bản khác nhau của kho Git. Thẻ có thể được thêm cho commit hiện tại nhà phát triển đang xem, hoặc cho commit hiện có trong kho.

Hướng dẫn này thảo luận, với ví dụ, những kiến thức cơ bản về gắn thẻ trong Git và cách dùng lệnh Git tag. Bây giờ bạn đã sẵn sàng bắt đầu dùng lệnh git tag như một nhà phát triển chuyên nghiệp!