假设我的 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
在存储库的克隆中。
我需要做一些类似的事情,但我想基本上将一个子项目从一个 repo 移动到另一个。我所做的是使用 fetch,因为它可以从任何来源获取对象。
所以,基本上,我创建了一个新分支,删除了该分支中不需要的东西,然后使用 git fetch 将分支从一个仓库拉到另一个仓库。一旦我有了对象,合并就可以了。
例如
在具有原始内容的存储库上:
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 in here”。从那里您可以将结果合并到您的主文件中。
git merge temp
然后,您可以删除临时分支,因为在第一种情况下,您不想与原始存储库合并,而在第二种情况下,您已经合并了它。
我敢肯定这些步骤可能会被压缩一点,但这一套看起来不错而且清晰。