场景用下图表示:
0 -- A -- B -- C -- D
\
E -- F -- G
在某些时候,EFG成为另一个项目,我想完全切断0ABCD和EFG的关系:
0 -- A -- B -- C -- D
E' - F' - G'
答案 0 :(得分:0)
我认为该过程类似于github站点上描述的用于从存储库中删除敏感数据的过程。这适用于逐个文件,并且取决于存储库的大小,可能需要一些时间。该过程详细描述here,并使用git-filter-branch
重写所有历史记录以删除该文件的所有出现(此处命名为removed_file
):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch removed_file' --prune-empty --tag-name-filter cat -- --all
这会重写历史记录,实质上会创建包含所有历史记录的新提交,因此旧提交的链接在新分支中不起作用。
我假设您不希望新的存储库包含其他部分仍然存在的历史记录。如果不是这样的话,就像将这些分支推送到单独的存储库并将它们重命名为master
分支一样简单。
答案 1 :(得分:0)
从我的笔记:
假设您要将git存储库拆分为两个或更多个离散存储库。您将要克隆基本存储库,然后使用git filter-branch
删除要删除的子目录,同时删除空提交。
1. Clone the repository
$ git clone git://git.foo.com/myrepo.git NewProject
$ cd NewProject
2. Filter the new project to retain only subdirectory "lib"
$ git filter-branch --prune-empty --subdirectory-filter lib master