【git】获取特定分支和所有分支
1 特定分支
1.1 克隆指定分支(默认只下载该分支)
git clone -b <分支名> --single-branch <仓库URL>
示例(克隆 某一个 分支):
git clone -b xxxxxx --single-branch xxxxxxx
-
-b
:指定分支 -
--single-branch
:仅克隆该分支(节省时间空间)
1.2 克隆后切换到另一个分支(如果已克隆仓库)
如果已经克隆了仓库,想切换到其他分支:
git fetch origin <分支名> # 先获取分支信息
git checkout <分支名> # 切换到该分支
示例(切换到 lesson-2
):
git fetch origin lesson-2
git checkout lesson-2
2 所有分支
git clone xxx
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
举一反三:
比如我有一个需求:下载博主的教学源码,就用到了git获取分支的知识,具体需求是在克隆每一个分支的同时想对每一个分支都创建一个文件夹,又不会bash命令,就可以在ai的帮助下
成功编写一个sh文件完成我的需求:
#!/bin/bash
set -e # 任何命令失败则退出
set -x # 打印执行的命令(调试模式)# 仓库配置
REPO_URL="https://github.com/iamshaunjp/bootstrap-5-tutorial.git"
REPO_NAME="bootstrap-5-tutorial"
BRANCHES_DIR="../branches"# 1. 克隆仓库(仅默认分支)
echo "步骤1/4: 克隆仓库..."
if [ -d "$REPO_NAME" ]; thenecho "错误:目录 $REPO_NAME 已存在,请删除或重命名!"exit 1
fi
git clone "$REPO_URL" "$REPO_NAME" || {echo "克隆失败!请检查网络或仓库URL。"exit 1
}
cd "$REPO_NAME" || exit 1# 2. 获取所有远程分支
echo "步骤2/4: 获取所有远程分支..."
git fetch --all || {echo "获取分支失败!"exit 1
}# 3. 遍历每个远程分支并导出文件
echo "步骤3/4: 导出各分支到 $BRANCHES_DIR/..."
mkdir -p "$BRANCHES_DIR" || exit 1git branch -r | grep -v '\->' | while read -r remote; dobranch_name="${remote#origin/}"target_dir="$BRANCHES_DIR/$branch_name"echo "----------------------------------------"echo "正在处理分支: $branch_name"echo "目标目录: $(pwd)/$target_dir"# 创建分支目录mkdir -p "$target_dir" || {echo "创建目录失败: $target_dir"exit 1}# 切换到分支git checkout "$branch_name" 2>&1 | tee -a ../branch_log.txt || {echo "切换分支失败: $branch_name"exit 1}# 复制文件(排除.git)echo "复制文件中..."cp -r ./* "$target_dir/" 2>&1 | tee -a ../copy_log.txt || {echo "复制文件失败: $branch_name"exit 1}echo "完成: $branch_name -> $target_dir"echo "文件数量: $(ls -1 "$target_dir" | wc -l)"
done# 4. 最终检查
echo "步骤4/4: 验证导出结果..."
echo "----------------------------------------"
echo "所有分支已导出到: $(pwd)/$BRANCHES_DIR"
echo "分支列表:"
ls -1 "$BRANCHES_DIR"
echo "----------------------------------------"
echo "导出完成!"