| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/bin/bash
-
- # 脚本用法:./git-commit-and-tag.sh "你的提交描述" "版本号"
-
- # 检查参数数量
- if [ $# -ne 2 ]; then
- echo "错误: 脚本需要2个参数。"
- echo "用法: $0 \"提交描述\" \"版本号\""
- echo "示例: $0 \"修复了登录问题\" \"v1.2.3\""
- exit 1
- fi
-
- # 分配参数
- COMMIT_MESSAGE="$1"
- VERSION_TAG="$2"
-
- # 检查当前目录是否为Git仓库
- if ! git rev-parse --git-dir > /dev/null 2>&1; then
- echo "错误: 当前目录不是一个Git仓库。"
- exit 1
- fi
-
- echo "开始处理提交和版本标签..."
- echo "提交描述: $COMMIT_MESSAGE"
- echo "版本标签: $VERSION_TAG"
-
- # 检查是否有未提交的更改
- if [ -n "$(git status --porcelain)" ]; then
- echo "检测到未提交的更改,正在提交..."
-
- # 添加所有更改到暂存区
- git add .
-
- # 进行提交
- git commit -m "$COMMIT_MESSAGE"
- if [ $? -ne 0 ]; then
- echo "错误: 提交失败。"
- exit 1
- fi
- echo "✅ 更改已提交"
- else
- echo "提示: 没有未提交的更改,跳过提交步骤"
-
- # 检查是否有未提交的commit但未推送
- LOCAL_COMMITS=$(git log @{u}..HEAD --oneline 2>/dev/null | wc -l)
- if [ $LOCAL_COMMITS -eq 0 ]; then
- echo "错误: 没有需要推送的提交。"
- exit 1
- else
- echo "检测到 $LOCAL_COMMITS 个本地提交等待推送"
- fi
- fi
-
- # 检查标签是否已存在
- if git rev-parse "$VERSION_TAG" >/dev/null 2>&1; then
- echo "错误: 标签 '$VERSION_TAG' 已经存在。"
- exit 1
- fi
-
- # 创建标签
- git tag "$VERSION_TAG"
- if [ $? -ne 0 ]; then
- echo "错误: 创建标签失败。"
- exit 1
- fi
- echo "✅ 标签 '$VERSION_TAG' 已创建"
-
- # 推送到远程仓库并推送标签
- echo "正在推送到远程仓库..."
- git push
- if [ $? -ne 0 ]; then
- echo "错误: 推送提交失败。"
- exit 1
- fi
-
- git push origin "$VERSION_TAG"
- if [ $? -ne 0 ]; then
- echo "错误: 推送标签失败。"
- exit 1
- fi
-
- echo "✅ 完成!提交已推送,版本标签 $VERSION_TAG 已创建并推送。"
|