如何将多文件夹Angular课程代码合并为单个Git仓库,每文件夹对应一次commit?
批量将多课程文件夹合并为单个Git仓库的高效方法
前提准备
假设你的所有课程项目文件夹都在同一个父目录下(比如../course-lessons/),且可以按课程顺序识别(比如按lesson-01、lesson-02命名,或你能手动整理出顺序列表)。
步骤1:初始化空Git仓库
先创建并进入一个新的空文件夹,作为统一的Git仓库:
mkdir angular-course-repo cd angular-course-repo git init # 可选:添加.gitignore忽略node_modules,避免提交依赖文件夹 echo "node_modules/" >> .gitignore git add .gitignore git commit -m "chore: add gitignore for node_modules"
步骤2:批量处理课程文件夹(脚本方式)
如果课程文件夹是按顺序命名的(比如lesson-01到lesson-n),直接用循环脚本一次性完成所有提交:
# 遍历父目录下的所有课程文件夹,按名称排序 for lesson_dir in ../course-lessons/lesson-*; do # 提取课程文件夹名称 lesson_name=$(basename "$lesson_dir") # 清空当前仓库的所有文件(保留.git目录) git rm -rf . # 复制当前课程的所有文件到仓库 cp -r "$lesson_dir"/* . # 暂存所有变更 git add . # 提交并添加清晰的备注 git commit -m "feat: $lesson_name complete project files" # 可选:给每个课程提交打标签,方便后续快速切换 git tag -a "$lesson_name" -m "Course lesson: $lesson_name" done
如果课程文件夹命名不规律,先手动整理好顺序,保存到lessons.txt文件中(每行一个课程文件夹的绝对/相对路径),再用以下脚本处理:
# 读取lessons.txt中的顺序,逐个处理 while read lesson_dir; do lesson_name=$(basename "$lesson_dir") git rm -rf . cp -r "$lesson_dir"/* . git add . git commit -m "feat: $lesson_name project files" git tag -a "$lesson_name" -m "Course lesson: $lesson_name" done < lessons.txt
步骤3:后续切换课程
完成所有提交后,你可以通过以下方式快速切换到任意课程的代码:
- 通过commit哈希切换:先执行
git log查看所有提交的哈希值,再运行git checkout <commit-hash> - 通过标签切换(如果之前打了标签):直接运行
git checkout lesson-01(替换为对应课程的标签名)
注意事项
- 脚本会自动覆盖当前仓库的所有文件,确保在空仓库中执行,避免误删已有内容
- 如果课程中包含
.gitignore或其他配置文件,脚本会自动保留对应课程的版本,符合每个commit对应课程当时的状态 - 不提交
node_modules可以大幅减少仓库体积,切换课程后只需执行一次npm install即可(因为每个课程的package.json已在commit中,依赖会自动匹配)
内容的提问来源于stack exchange,提问作者Luis Alejandro Burgos Rosero
相关产品推荐
相关产品推荐

