89 lines
3.0 KiB
Bash
89 lines
3.0 KiB
Bash
#!/bin/bash
|
|
# 脚本名称:sync_remote_branch.sh
|
|
# 功能描述:修复origin/sit引用问题,强制同步远程分支到本地develop
|
|
# 使用方法:./sync_remote_branch.sh <远程分支名>
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# 检查参数
|
|
if [ $# -eq 0 ]; then
|
|
echo -e "${RED}错误:未传入分支名称参数!${NC}"
|
|
echo -e "使用方法:${YELLOW}$0 <远程分支名>${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "▶ 先设置内网网络\n"
|
|
sudo route add -host 25.13.9.101 25.64.32.254
|
|
# 配置参数
|
|
TARGET_BRANCH="$1"
|
|
WORK_DIR="Desktop/lx_uniapp/build/git_work_code"
|
|
REMOTE_NAME="origin"
|
|
LOCAL_BRANCH="develop"
|
|
|
|
echo -e "\n${YELLOW}===== 开始执行分支同步脚本 =====${NC}"
|
|
echo -e "▶ 远程目标分支:${YELLOW}${TARGET_BRANCH}${NC}"
|
|
echo -e "▶ 本地工作目录:${YELLOW}${WORK_DIR}${NC}\n"
|
|
|
|
# 1. 进入工作目录
|
|
echo -e "${YELLOW}1. 检查并进入工作目录...${NC}"
|
|
if [ ! -d "$WORK_DIR" ]; then
|
|
echo -e "${RED}错误:工作目录不存在!${NC}"
|
|
exit 1
|
|
fi
|
|
cd "$WORK_DIR" || {
|
|
echo -e "${RED}错误:无法进入工作目录!${NC}"
|
|
exit 1
|
|
}
|
|
echo -e "✅ 成功进入工作目录:$(pwd)\n"
|
|
|
|
# 2. 检查Git仓库
|
|
echo -e "${YELLOW}2. 检查Git仓库...${NC}"
|
|
if [ ! -d ".git" ]; then
|
|
echo -e "${RED}错误:当前目录不是Git仓库!${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "✅ 确认是Git仓库\n"
|
|
|
|
# 3. 关键修复:获取远程分支完整信息(不限制深度)
|
|
echo -e "${YELLOW}3. 完整获取远程所有分支完整信息...${NC}"
|
|
# 先移除可能存在的浅层克隆限制
|
|
git config --unset core.depth
|
|
# 完整拉取所有分支信息
|
|
if ! git fetch "$REMOTE_NAME" "+refs/heads/*:refs/remotes/$REMOTE_NAME/*"; then
|
|
echo -e "${RED}错误:拉取远程分支信息失败!${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "✅ 远程分支信息拉取完成\n"
|
|
|
|
# 4. 再次检查远程分支是否存在
|
|
echo -e "${YELLOW}4. 验证远程 ${TARGET_BRANCH} 分支...${NC}"
|
|
if ! git show-ref --verify --quiet "refs/remotes/$REMOTE_NAME/$TARGET_BRANCH"; then
|
|
echo -e "${RED}错误:远程确实不存在 ${TARGET_BRANCH} 分支!${NC}"
|
|
echo -e "远程所有分支列表:"
|
|
git branch -r
|
|
exit 1
|
|
fi
|
|
echo -e "✅ 确认远程存在 ${YELLOW}${TARGET_BRANCH}${NC} 分支\n"
|
|
|
|
# 5. 同步到本地develop分支
|
|
echo -e "${YELLOW}5. 同步远程 ${TARGET_BRANCH} 到本地 ${LOCAL_BRANCH}...${NC}"
|
|
echo -e "${YELLOW}⚠️ 警告:将覆盖本地develop分支所有内容!${NC}"
|
|
|
|
# 确保本地有develop分支
|
|
git checkout -B "$LOCAL_BRANCH" >/dev/null 2>&1
|
|
|
|
# 关键命令:使用完整引用路径
|
|
if ! git reset --hard "refs/remotes/$REMOTE_NAME/$TARGET_BRANCH"; then
|
|
echo -e "${RED}错误:同步远程分支到本地失败!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 6. 完成提示
|
|
echo -e "\n${GREEN}===== 操作完成 =====${NC}"
|
|
echo -e "✅ 本地 ${YELLOW}${LOCAL_BRANCH}${NC} 已同步为远程 ${YELLOW}${TARGET_BRANCH}${NC} 最新状态"
|
|
echo -e "当前版本:"
|
|
git log -1 --pretty=format:"%h - %an, %ar : %s"
|