假设我的git仓库的结构如下:提取git存储库的一部分?
/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2
和档案库有相当长的一段提交。现在其中一个子项目(SubProject-0)增长很大,我想将SubProject-0取出并将其设置为独立项目。是否有可能从父git存储库中提取涉及SubProject-0的所有提交历史记录并将其移至新的历史记录?
假设我的git仓库的结构如下:提取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
在仓库的一个克隆。
我需要做类似的事情,但我想从本质上将一个子项目从一个回购移到另一个。我所做的是使用fetch,因为它可以从任何来源获取对象。
因此,基本上,我创建了一个新分支,删除了该分支中不需要的东西,然后使用git fetch将分支从一个回购仓库拉到另一个仓库。一旦我有了这些对象,合并就完成了。
E.g.
在具有原始材料库:
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”。从那里你可以将结果合并到你的主人。
git merge temp
然后,您可以删除临时分支,因为它不是你想与原来的回购合并一些第一种情况,而在第二种情况下,你把它合并。
我确定这些步骤可能会被压缩一点,但这个设置看起来不错而且清晰。
请注意,这是一个http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository(如吉姆DeLaHunt在他的答案中所述)的副本。 – 2012-10-03 06:36:39