假设我的git仓库具有以下结构:
/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2
仓库有很多提交记录。现在其中一个子项目(SubProject-0)增长相当大,我想将SubProject-0提取出来并将其设置为独立项目。是否可能从父git仓库中提取涉及SubProject-0的所有提交历史并将其移动到一个新的仓库?
假设我的git仓库具有以下结构:
/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2
仓库有很多提交记录。现在其中一个子项目(SubProject-0)增长相当大,我想将SubProject-0提取出来并将其设置为独立项目。是否可能从父git仓库中提取涉及SubProject-0的所有提交历史并将其移动到一个新的仓库?
请参考http://git-scm.com/docs/git-filter-branch
我认为你需要这样做
git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all
在存储库的克隆中。
--prune-empty
选项来清除仅涉及到Project/SubProject-0
的提交。 - Greg Bacon git checkout -b temp master
git rm -r Unneeded_stuff
git commit -m 'pruning'
然后,您可以将该分支从一个存储库提取到完全不相关的另一个存储库中:
cd /path/to/other/repository
git fetch /path/to/source/repo temp:temp
其中 temp:temp 的意思是“从源中获取 temp 并将其保存为此处的 temp”。从那里,您可以将结果合并到主文件中。
git merge temp
然后,您可以删除临时分支,因为在第一种情况下,它不是您想要与原始存储库合并的内容,而在第二种情况下,您已经将其合并。
我相信这些步骤可以压缩一下,但是这个集合看起来很清晰。