Shell git 分支按版本号大小排序

115 阅读1分钟

1. 使用git命令获取最近提交的分支

lastBranch=`git for-each-ref --sort=-committerdate refs/remotes/origin | grep -E 'preRelease' | head -1`
lastBranch=${lastBranch#*refs/remotes/}
echo $lastBranch

2. 使用sort + 文件排序

versions=()
 
branches=`git branch -a | grep origin/preRelease/`

for branch in $branches; 
do 
    new_version=`echo $branch | awk -F '/' '{print $4}'`; 
    new_version=${new_version%%_*}
    echo $new_version
    # new_version=${new_version##*beta}
    versions[${#versions[*]}]=$new_version; 
done
 
for version in ${versions[@]};
do 
    echo $version >> versions.txt
done

# newest_version=`cat versions.txt | sort -rV | head -n 1`
newest_version=`sort -rV versions.txt | head -n 1`
echo $newest_version
newest_version=`git branch -a | grep origin/preRelease/${newest_version}_`
newest_version=${newest_version/remotes\/origin\//}
echo $newest_version

rm versions.txt

3. 不用文件排序

function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }

versions=()
 
branches=`git branch -a | grep origin/preRelease/`

for branch in $branches; 
do 
    new_version=`echo $branch | awk -F '/' '{print $4}'`; 
    new_version=${new_version%%_*}
    echo $new_version
    # new_version=${new_version##*beta}
    versions[${#versions[*]}]=$new_version; 
done

newest_version=$versions[0]
for version in ${versions[@]};
do 
    if version_gt $version $newest_version; then
        newest_version=$version
    fi
done

echo $newest_version
newest_version=`git branch -a | grep origin/preRelease/${newest_version}_`
newest_version=${newest_version/remotes\/origin\//}
echo $newest_version

4. 简化3

function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }

branches=`git branch -a | grep origin/preRelease/`

newest_version=0
for branch in $branches; 
do 
    version=`echo $branch | awk -F '/' '{print $4}'`; 
    version=${version%%_*}
    echo $version
    # new_version=${new_version##*beta}
    if version_gt $version $newest_version; then
        newest_version=$version
    fi
done

echo $newest_version
newest_version=`git branch -a | grep origin/preRelease/${newest_version}_`
newest_version=${newest_version/remotes\/origin\//}
echo $newest_version

参考