【发布时间】:2012-03-19 09:17:09
【问题描述】:
我有一个 git repo,比如说 repoA,有很多子目录。如何分离其中一个子目录,比如 dir1,并将其作为单独的分支(带有历史记录)添加到另一个 repo?
其次,如何从 repoA 中删除分离子目录的历史记录?
【问题讨论】:
-
有一个名为
git-subtree的工具可以从你的repo 中分离出一个子目录。我不知道它是否可以从您的主仓库中删除该子目录的历史记录。如果没有,您可以随时使用git filter-branch执行此操作,尽管该命令有点复杂。 -
谢谢凯文!我已经分离了子目录: git filter-branch --subdirectory-filter dir1 --prune-empty 这让我只剩下 dir1,现在我必须将此目录添加到另一个 repo,比如 RepoB,作为单独的分支。对我来说棘手的部分是我怎样才能使 dir1 的历史成为 repoB 历史的一部分,所以每当用户执行 repoB 的 git 克隆时,他也可以看到 dir1 的整个历史。在寻找解决方案时,我开始了解“graft”文件和 git-rebase。但是,正如我所提到的,我是 git 新手,我不知道如何使用这些选项。
-
所以你有一个只包含
dir1历史的repo。最简单的做法是使用git fetch将此历史记录获取到您要添加到的存储库中,然后只需git merge将其放入。
标签: git git-filter-branch