提取部分git存储库?

时间:2010-03-29 13:38:17

标签: git repository extraction

假设我的git存储库具有以下结构:

/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2

并且存储库有一些提交。现在其中一个子项目(SubProject-0)变得非常大,我想将SubProject-0取出并将其设置为独立项目。是否可以从父git存储库中提取涉及SubProject-0的所有提交历史记录并将其移动到新的?

2 个答案:

答案 0 :(得分:37)

请参阅http://git-scm.com/docs/git-filter-branch

我认为你需要像

这样的东西
git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all

在存储库的克隆中。

答案 1 :(得分:1)

我需要做类似的事情,但我想基本上将一个子项目从回购转移到另一个。我所做的是使用fetch,因为它可以从任何来源获取对象。

所以,基本上,我创建了一个新分支,删除了该分支中不需要的东西,然后使用git fetch将分支从一个repo拉到另一个repo。一旦我拥有了这些对象,合并就可以了。

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表示“在源上获取temp并将其保存为temp in here”。从那里你可以将结果合并到你的主人。

    git merge temp

然后你可以删除临时分支,因为在第一种情况下它不是你想要与原始仓库合并的东西,在第二种情况下你已经合并了它。

我确信这些步骤可能会被压缩一点,但这个设置看起来很清楚。