Monday, January 4, 2021

Learn how to use git tag for Code Revisions

In this post, let's do an experiment with git tag command options. In GitOps we need to know what is a tag? How many types of git tags? We will learn about Creating, deleting, and listing tags for a project repository. Once everything is done, we need to know how to push the tag to the remote repository.


Work tree for git tag creation

Why git tagging?

  1. Tagging is used to mark a commit stage as important
  2. We can tag a commit for future references 
  3. Typically tagging wiil be used to book mark release points in a Project.
  4. Annotated tags will be recommend where you are working in team and collaborating for a project development.

Before you start on git tag

You must have a GitHub or GitLab account to work on a remote repository. Knowledge of basic repository creation on these Git clouds. On your git client shell (git bash as well) you must create the global user identity entries in the configurations.

[vagrant@mydev tags_handson]$ git config --list
user.email=bhavanishekhar@gmail.com
user.name=Pavan Devarakonda
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

# Now let's begin
 mkdir tags_handson
 cd tags_handson/
 git init
 echo "test1"> test1.txt
Enter some text into the test1.txt file.

What is git tag?

Git Tags are a simple aspect of the Git version control system, they allow you to identify specific release versions of your application code. You can think of a tag as a branch that doesn't change. Once the git tag is created, it loses the ability to change the history of commits.

Git supports two types of tags:

  1. Annotated Tags: Annotated tags, however, are stored as full objects in the Git database.
  2. Lightweight Tags: A lightweight tag is very much like a branch that doesn’t change — it's just a pointer to a specific commit.

How to Create tags in Git?

 To create a new tag execute the following command

Annotated tags store extra metadata such as Author name, Release notes, tag-message, and Date as full objects in the Git database. All this data is important for the public release of your project.

Tags can also include a more descriptive tag-message or annotation much like a commit message when you are about to merge. Usually, this is achieved by using (-a for annotation):

git tag -a v1.1 -m 'annotated tag test'

Lightweight tagging

It is simple to create and use, just need to pass the tag name example here for v1.0 the command:
git tag v1.0

How to delete the tags from the local and remote repo?

Unwanted tags we can remove from the repo using the -d or --delete option along with the git tag command. There are two levels of deletion could happens at local and remote

i. Delete a local tag

To remove both types of annotated and lightweight tag use the following git tag command with -d

git tag -d tag_name 

Example:
git tag -d v1.0
Note: If you try to delete a non existig Git tag, there will be the following error: 

git tag -d tag_name error: tag 'tag_name' not found. 

ii. Delete remote tags

To delete a tag from the remote git server with push tags

git push --delete origin remote_tag_name

Hope you are already global configuratoin with remote git server.

Example:
git push --delete origin v1.0.0-rc1


Listing tags 

To list-out all the tags in a work area, we can use
git tag 
 
Listing git tags

git tag -l '*rc*'
Now in this we can use regular expression in single quotes to see particular tags only, here I've selected all the tags with word contians 'rc'

Filter git tag
Listing particular git tags



If you want to list all the tags in sorted order, that based on date :
git log --tags --simplify-by-decoration --pretty="%ai %d"
git tags in sorted order



How to push tags? 

To push a single tag or a specific tag to remote repo:
git push origin v1.0 

To push all tag use following command:
git push origin --tags 
or
To push all the tags to remote (not recommended):
git push --tags 

Run this to push mytag to a project that is hosted on GitHub or GitLab on git origin
git push origin refs/tags/mytag
Best practice using the refs/tags instead of just specifying the . Why? It's recommended to use refs/tags since sometimes tags can have the same name as your branches and a simple git push will push the branch instead of the tag
To push annotated tags and current history chain tags use:
git push --follow-tags
This flag --follow-tags pushes both commits and only tags that are both:
Annotated tags (so you can skip local/temp build tags) Reachable tags (an ancestor) from the current branch (located on the history) 


You should only push annotated tags to the remote repo, and keep lightweight tags for local repo for development to avoid tag clashes. it won't push annotated tags on unrelated branches


Now...

In order to checkout a git tag , you would execute the following command
git checkout tags/tag-name -b branch-name eg as mentioned below.
 git checkout tags/v1.0 -b v1.0-branch 

To fetch the all tags use the command with git fetch:
git fetch --all --tags 

git tag cheat sheet




In my understanding about git tag is like branch but cannot move.

References: 

1 comment:

Pranav Sai said...

Thanks pavan sir for giving good information about git tags

Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) create deployment (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)