npm versionのように簡単にgitのタグを使ってセマンティックにバージョンアップをするワンライナー
OSSや多人数でのプロジェクト開発をしているときに必要になってくるのは、プロジェクト自体のセマンティックなバージョン管理かと思います。
特にインストール型のプロジェクトでは、現在のユーザのバージョンと比較して、インストールさせるべきか、させる場合はどういうメッセージを出すかなどを判断するのに、メジャーバージョンやマイナーバージョン、パッチバージョンなどのバージョンを比較しているかと思います。
npmであれば、npm version
を使うと、Node.jsをもちいたパッケージのバージョンアップを簡単にできる様になっているかと思います。
ただ、そういった機能が備わっていない言語の管理やパッケージ管理ツールを使っていないプロジェクトなどでは独自にセマンティックバージョンを管理する必要があり、それを毎回最新のタグをみて更新するのは面倒かと思うので、ワンライナーで簡単に管理できるようにしました。
導入方法
まず、下記のシェルスクリプトをどこかに配置します。
著者はzshを使っているので、~/.zsh/version_up.sh
に設定しています。
#!/bin/sh
version=`awk '{print $1}' < /dev/stdin`
command=$1
major=`echo $version | awk -F '.' '{print $1}'`
minor=`echo $version | awk -F '.' '{print $2}'`
bugfix=`echo $version | awk -F '.' '{print $3}'`
build=`echo $version | awk -F '.' '{print $4}'`
if [ -z "$version" ]; then
echo "USAGE: echo 1.0.0 | version_up.sh [major|minor|bugfix|build]"
exit 1
fi
if [ "$command" = '' ]; then
if [ -n "$build" ]; then
build=`expr $build + 1`
elif [ -n "$bugfix" ]; then
bugfix=`expr $bugfix + 1`
fi
elif [ "$command" = 'major' ]; then
major=`expr $major + 1`
minor=0
bugfix=0
build=0
elif [ "$command" = 'minor' ]; then
minor=`expr $minor + 1`
bugfix=0
build=0
elif [ "$command" = 'bugfix' ]; then
bugfix=`expr $bugfix + 1`
build=0
elif [ "$command" = 'build' ]; then
build=`expr $build + 1`
fi
if [ "$command" = "major" -o "$command" = 'minor' -o "$command" = 'bugfix' ]; then
if [ -n "$build" ]; then
build=0
fi
fi
if [ -n "$build" ]; then
echo ${major}.${minor}.${bugfix}.${build}
else
echo ${major}.${minor}.${bugfix}
fi
次に~/.zshrc
内部に下記スクリプトを記載します。
alias vup="git tag -l | tail -n 1 | sed 's/[^0-9\.]//g' | ~/.zsh/version_up.sh" # version up string
最後に下記のコマンドで実行するだけです。
$ git tag -l
v1.6.1
$ vup major
2.0.0.0
$ vup minor
1.7.0.0
$ vup bugfix
1.6.2.0
あとはこの出力されたバージョンを使ってタグを生成してもいいし、何かしらのファイルに出力するのでもいいと思います。
Author And Source
この問題について(npm versionのように簡単にgitのタグを使ってセマンティックにバージョンアップをするワンライナー), 我々は、より多くの情報をここで見つけました https://qiita.com/kotamat/items/aab43a9a05b3368c5efc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .