Thursday, November 21, 2024

[Git] Phần 14 – Tag trong Git, đánh dấu phiên bản và đẩy lên GitHub

-

1. Tổng quan.

Trong Git, “tag” được sử dụng để đánh dấu một điểm cụ thể trong lịch sử của mã nguồn, thường được sử dụng để đánh dấu các phiên bản phát hành.

Có hai loại tag trong Git: “lightweight” và “annotated”.

  • Lightweight tag: Đơn giản chỉ là một con trỏ đến commit cụ thể.
  • Annotated tag: Là một đối tượng trong Git, chứa thông tin bổ sung như tên người tạo tag, email, ngày tạo và có thể có một thông điệp mô tả.

Quy trình thêm 1 tag.

Để tạo một tag, bạn có thể sử dụng lệnh git tag. Ví dụ, để tạo một annotated tag, bạn có thể sử dụng lệnh sau:

git tag -a v1.0 -m "my version 1.0"

Trong đó, v1.0 là tên của tag và "my version 1.0" là thông điệp mô tả.

Sau khi tạo tag, bạn có thể đẩy nó lên GitHub bằng cách sử dụng lệnh git push. Để đẩy tất cả các tag, bạn có thể sử dụng lệnh sau:

git push origin --tags

Trong đó, origin là tên mặc định của remote repository.

Lưu ý: Khi bạn tạo một tag, Git mặc định sẽ tạo tag cho commit hiện tại. Nếu bạn muốn tạo tag cho một commit khác, bạn có thể thêm SHA của commit đó vào cuối lệnh git tag.

Quy trình xóa 1 tag.

Để xóa một tag trong Git, bạn có thể sử dụng lệnh git tag -d theo sau là tên của tag. Ví dụ, để xóa một tag có tên là v1.0, bạn có thể sử dụng lệnh sau:

git tag -d v1.0

Lưu ý rằng điều này chỉ xóa tag từ kho lưu trữ cục bộ của bạn. Nếu bạn đã đẩy tag lên một kho lưu trữ từ xa (như GitHub), bạn cũng cần xóa nó từ kho lưu trữ từ xa. Để làm điều này, bạn có thể sử dụng lệnh git push với tùy chọn :refs/tags/ theo sau là tên của tag. Ví dụ:

git push origin :refs/tags/v1.0

Trong đó, origin là tên mặc định của kho lưu trữ từ xa.

2. Thực hành.

2.1. Thêm 1 tag.

Đây là lịch sử commit Repo của mình ở bài trước.

shell> git log --oneline
dcffaf8 (HEAD -> main, origin_github/main) Github1
13507ed (origin/main) M5 - Merge
4211e90 M4 - gitlocal-192.168.13.232
28310f3 M4
74136ce M3
4c141f3 M2
7690035 M1
add27da C2
7de3cce C1

shell> git log --oneline beta
af9135c (origin_github/beta, origin/beta, beta) B1
add27da C2
7de3cce C1

Trong Git, tùy chọn -a khi sử dụng với lệnh git tag dùng để tạo một “annotated tag”.

Annotated tag, khác với lightweight tag, là một đối tượng đầy đủ trong hệ thống Git, chứa thông tin bổ sung như tên người tạo tag, email, ngày tạo và có thể có một thông điệp mô tả.

Ví dụ, để tạo một annotated tag, bạn có thể sử dụng lệnh sau:

git tag -a "V0.beta" -m "Phien ban beta 0" 7de3cce
git tag -a "V1.beta" -m "Phien ban beta 1" af9135c

Trong đó, V1.beta là tên của tag và "Phien ban beta 1" là thông điệp mô tả. Tùy chọn -a chỉ định rằng đây sẽ là một annotated tag.

2.2. Hiển thị danh sách các tag.

Dùng lệnh git tag để hiển thị danh sách các tag.

shell> git tag
V0.beta
V1.beta

2.3. Hiển thị chi tiết một tag.

Lệnh git show được sử dụng để xem thông tin về một đối tượng Git, như một commit, một tag, v.v. Trong trường hợp này, nó đang hiển thị thông tin về tag V0.beta.

shell> git show V0.beta
tag V0.beta
Tagger: Hà Đăng Hoàng <hoanghd164@gmail.com>
Date:   Mon Feb 12 08:53:21 2024 +0700

Phien ban beta 0

commit 7de3cce1d5bde33d44f396fc2f20785c2666179a (tag: V0.beta)
Author: hoanghd <hoanghd164@gmail.com>
Date:   Mon Feb 5 10:43:57 2024 +0700

    C1

diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..fc9f904
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+Noi dung A

Dưới đây là thông tin chi tiết về output:

  • tag V0.beta: Đây là tên của tag bạn đang xem.
  • Tagger: Hà Đăng Hoàng <hoanghd164@gmail.com>: Đây là người đã tạo tag này.
  • Date: Mon Feb 12 08:53:21 2024 +0700: Đây là thời gian tag được tạo.
  • Phien ban beta 0: Đây là thông điệp mô tả của tag.
  • commit 7de3cce1d5bde33d44f396fc2f20785c2666179a (tag: V0.beta): Đây là commit mà tag này đang trỏ đến.
  • Author: hoanghd <hoanghd164@gmail.com>: Đây là người đã tạo commit.
  • Date: Mon Feb 5 10:43:57 2024 +0700: Đây là thời gian commit được tạo.
  • C1: Đây là thông điệp commit.
  • Phần còn lại của output hiển thị sự khác biệt trong mã nguồn giữa commit này và commit trước đó. Trong trường hợp này, nó cho thấy một file mới a.txt đã được tạo với nội dung “Noi dung A”.

2.4. Xóa một tag.

Để xóa một tag bạn dụng lệnh git tag -d <tag_name>.

shell> git tag -d "V0.beta" 
Deleted tag 'V0.beta' (was e07d306)

2.5. Quay lại một commit dựa vào tag.

Chúng ta cũng có thể quay về commit được đánh tag bằng lệnh git checkout <tag_name> như dưới.

shell> git checkout V1.beta
Note: switching to 'V1.beta'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at af9135c B1

2.6. Tạo nhánh mới dựa vào tag.

Chúng ta tạo ra 2 tag mới để thực hiện các ví dụ tiếp theo.

shell> git tag -a "V1.0" -m "Phien ban 1.0" 4211e90 
shell> git tag -a "V2.0" -m "Phien ban 2.0" 13507ed 
shell> git tag
V1.0
V1.beta
V2.0

Chúng ta có thể tạo ra 1 nhánh với điểm rẽ nhánh sẽ là 1 tag nào đó, ví dụ:

shell> git checkout -b alpha V1.0
Switched to a new branch 'alpha'

Kết quả.

shell> git log --oneline
4211e90 (HEAD -> alpha, tag: V1.0) M4 - gitlocal-192.168.13.232
74136ce M3
4c141f3 M2
7690035 M1
add27da C2
7de3cce C1

2.6. Push một tag lên git remote.

Mình sử dụng lệnh git push <remote_name> <tag_name>.

shell> git tag
V1.0
V1.beta
V2.0

shell> git remote -v
origin  hoanghd@192.168.13.231:/home/hoanghd/repos/myproject/ (fetch)
origin  hoanghd@192.168.13.231:/home/hoanghd/repos/myproject/ (push)
origin_github   git@github.com:hoanghd164/testproject.git (fetch)
origin_github   git@github.com:hoanghd164/testproject.git (push)

shell> git push origin_github V1.beta
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 182 bytes | 182.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:hoanghd164/testproject.git
 * [new tag]         V1.beta -> V1.beta

Kiểm tra trên Github chúng ta đã thấy 1 tag.

Nếu bấm vào tag này bạn sẽ thấy chi tiết phiên bản và sẽ cho phép bạn tải phiên bản này về máy.

Bấm vào tag cần tải và tiến hành tải phiên bản đó về máy với file nén.

Mình tiến hành push 2 tag còn lại lên Github.

shell> git push origin_github V1.0
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 177 bytes | 177.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:hoanghd164/testproject.git
 * [new tag]         V1.0 -> V1.0

shell> git push origin_github V2.0
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 177 bytes | 177.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:hoanghd164/testproject.git
 * [new tag]         V2.0 -> V2.0

Kết quả.

2.7. Xóa một tag.

Xóa ở Local.

shell> git tag -d V2.0
Deleted tag 'V2.0' (was 4be1554)

Xóa ở Remote.

shell> git push --delete origin_github V2.0
To github.com:hoanghd164/testproject.git
 - [deleted]         V2.0

Kết quả sau khi xóa ở trên Remote.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories