提取git存储库的一部分?
假设我的git存储库具有以下结构:提取git存储库的一部分?,git,repository,extraction,Git,Repository,Extraction,假设我的git存储库具有以下结构: /.git /Project /Project/SubProject-0 /Project/SubProject-1 /Project/SubProject-2 而且存储库有相当多的提交。现在其中一个子项目(SubProject-0)变得相当大,我想将SubProject-0取出并将其设置为一个独立的项目。是否可以从父git存储库中提取所有涉及SubProject-0的提交历史记录,并将其移动到新的git存储库中 见 我想你需要像这样的东西 git filt
/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2
而且存储库有相当多的提交。现在其中一个子项目(SubProject-0)变得相当大,我想将SubProject-0取出并将其设置为一个独立的项目。是否可以从父git存储库中提取所有涉及SubProject-0的提交历史记录,并将其移动到新的git存储库中 见
我想你需要像这样的东西
git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all
在存储库的克隆中。我需要做一些类似的事情,但我想将一个子项目从一个回购项目转移到另一个子项目。我所做的是使用fetch,因为它可以从任何源获取对象 因此,基本上,我创建了一个新分支,删除了该分支中不需要的内容,然后使用git fetch将该分支从一个回购协议拉到另一个回购协议。一旦我有了这些对象,merge就完成了这个任务 例如 在包含原始内容的存储库上:
git checkout -b temp master
git rm -r Unneeded_stuff
git commit -m 'pruning'
然后,您可以将该分支从一个存储库提取到一个完全不同的存储库(不相关):
其中temp:temp表示“在源上获取temp并将其另存为temp”。从那里你可以将结果合并到你的主文件中
git merge temp
然后,您可以删除临时分支,因为在第一种情况下,您不想将其与原始回购合并,而在第二种情况下,您已将其合并
我相信这些步骤可以压缩一点,但这一组看起来很好而且清晰。@Rio您可能还想使用
--prune empty
选项来删除只涉及项目/子项目-0
的提交。请注意,这是(正如Jim DeLaHunt在回答中所说的)的副本。很抱歉,让您对一篇旧帖子感到困惑,但是这回答了一个有用但与OP不同的问题。你能为这个答案创建一个新的q/a对吗?这样会更容易找到。最好使用filter方法创建一个临时存储库,只包含要移动的文件,然后从临时存储库中执行合并步骤,因为这样做仍然具有原始回购的完整历史记录(仅在最后提交时执行删除步骤)。
git merge temp