我有一个git项目,它有一个很大的根目录:
C:\MyProject\MyProject
C:\MyProject\.git
然后所有文件和子目录都在C:\MyProject\MyProject
内。我想删除那个多余的根目录,所以我使用了这个命令:
git subtree split -P MyProject -b MyBranch
git checkout MyBranch
git branch -D master
git branch -m MyBranch master
此解决方案存在问题,但标记仍附加到现已删除的原始主分支:
灰色分支是原始主分支,红色分支是没有冗余目录的新分支,但标记仍然附加到旧分支的签到。
答案 0 :(得分:2)
git filter-branch
可能能够执行您想要的移动并迁移所有分支和其他引用,例如标记。 --subdirectory-filter
将执行类似于您正在创建的子树的操作:
git filter-branch --prune-empty --subdirectory-filter subDirectory -- --all
Check this other answer有关如何为此类操作设置存储库的更多详细信息。
答案 1 :(得分:1)
我试过
git filter-branch --prune-empty --subdirectory-filter <ProjectSubFolder>
--tag-name-filter cat -- --branches
那也转移了标签,但保留了一个带有跟踪参考的悬挂分支,所以我手动删除了文件.git \ refs \ original \ refs \ heads \ master,悬空分支消失了。