【问题标题】:Extract part of a git repository?提取 git 存储库的一部分?
【发布时间】:2011-02-02 01:17:37
【问题描述】:

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

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

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

【问题讨论】:

标签: git repository extraction


【解决方案1】:

http://git-scm.com/docs/git-filter-branch

我认为你需要类似的东西

git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all

在存储库的克隆中。

【讨论】:

  • @Rio 您可能还想使用--prune-empty 选项来删除仅涉及Project/SubProject-0 的提交。
【解决方案2】:

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

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

例如

在包含原始内容的存储库上:

    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

然后您可以删除临时分支,因为在第一种情况下,您不想与原始存储库合并,而在第二种情况下,您已经合并了它。

我确信这些步骤可以压缩一点,但是这组看起来不错而且清晰。

【讨论】:

  • 很抱歉给你发了一篇旧帖子的问题,但这回答了一个有用但与 OP 不同的问题。你能为这个答案创建一个新的 q/a 对吗?这样会更容易找到。
  • 最好使用过滤器方法创建一个临时存储库,其中仅包含您要移动的文件,然后从临时存储库中执行合并步骤,因为这样做仍然有原始 repo 的完整历史记录(仅将删除步骤作为最后一次提交)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
相关资源
最近更新 更多