Git Checkout Latest Tag

2020-02-07 17:20发布

I'm writing a shell script and I'm looking to checkout the latest version of repo. Specifically I want to break this process apart into multiple steps.

  1. I want to save the repositories latest tag into a variable
  2. Print out Checking out version: XX
  3. Checkout the latest tag

I've seen similar questions but I don't see how to save the name of the tag into a variable (probably because I'm a noob with shell scripts).

6条回答
\"骚年 ilove
2楼-- · 2020-02-07 17:23

In order to put information into a variable, you assign it:

myvar=myvalue

However, you want to calculate the value to assign, you're not just assigning a constant to the variable. In your case, you want to assign the output of a command to the variable.

First, you have to figure out how to get the last tag name. I'll leave that up to you, as you haven't said anything about how the tag names are created.

Then once you have a command that gives the last tag name, you need to assign the name into a variable. Bash does that with "command substitution".

For example: thetagname=$( command_to_get_tag_name )

So if you were to just take the last tag that git reports like this:

git tag | tail -1

then you could assign it to a variable like this:

thetagname=$( git tag | tail -1)

and you could use/see the value like this:

echo $thetagname

or as user1281385 says, like this:

echo ${thetagname}

The two methods are the same, except that the second way allows you to combine literal text with the variable value:

echo ${thetagname}ing

which will append "ing" to the contents of $thetagname. The braces are necessary in order to prevent bash from thinking that "thetagnameing" is the variable.

The bash man page has a section called EXPANSION, in which it explains the 7 kinds of expansion. Command substitution is one of them. The bash man page is rather big, and indeed repeats all the interesting keywords multiple times, so it is really annoying to search for stuff in it. Here are a couple of tips on how to find the EXPANSION section (and learn a bit about the pager "less"):

Start the manual reader reading the bash man page like this:

man bash

Search for the term 'EXPANSION' at the beginning of a line once you're in the reader by typing /^EXPANSION into the display. Once you type /, you will see a / at the bottom of the screen, but the man page will still be there. That is the command to search for a pattern. Then you type ^EXPANSION, and you will see that at the bottom of the screen as well. ^ means "search for things at the beginning of the line" and EXPANSION means "look for the literal string "EXPANSION". Then type <enter> - and you should be at the first occurence of the term EXPANSION that occurs at the beginning of the line. Here it describes all the kinds of expansion that the bash shell does on your line after you type it and before it executes the transformed command.

When in the pager, you can type h to get a list of the possible commands.

I hope this wasn't too basic. If you haven't seen it before, it's hard to figure out.

查看更多
劫难
3楼-- · 2020-02-07 17:28

In some repositories the git describe --tags gives no info and a simple git tag | tail -1 can get you the wrong tag as git sorts tags in a strange way.

For me the best command is a variation of the tail one

VERSION=$(git tag | sort -V | tail -1)

查看更多
我命由我不由天
4楼-- · 2020-02-07 17:31
git tag --contains | tail -1

git tag --contains lists all tags in the current branch, tail -1 limits the count of output results to be 1,and it will be the latest one.

查看更多
Bombasti
5楼-- · 2020-02-07 17:35

git describe --tags should give you info.

bash/ shell script:

#!/bin/bash
...
latesttag=$(git describe --tags)
echo checking out ${latesttag}
git checkout ${latesttag}
查看更多
成全新的幸福
6楼-- · 2020-02-07 17:38

just run git checkout $(git describe --tags)

查看更多
孤傲高冷的网名
7楼-- · 2020-02-07 17:43
# Get new tags from remote
git fetch --tags

# Get latest tag name
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)

# Checkout latest tag
git checkout $latestTag
查看更多
登录 后发表回答