git子树拆分 - 标签不会被转移

时间:2014-01-07 19:53:45

标签: git git-subtree git-tag

我有一个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

此解决方案存在问题,但标记仍附加到现已删除的原始主分支:

enter image description here

灰色分支是原始主分支,红色分支是没有冗余目录的新分支,但标记仍然附加到旧分支的签到。

2 个答案:

答案 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,悬空分支消失了。