复制不同的git存储库内容并保留特定目录的内容和历史记录

时间:2010-08-09 06:45:04

标签: git

我有git存储库rA和rB,我想只复制rA中的特定目录并保留它们的历史记录,例如。

rA
 - d1
 - d2
 - d3
 - d4
rB (with d1 and d2 preserved)
 - d1
 - d2

到目前为止,我所做的是:

git remote add -f rA /path/to/rA
git merge -s ours --no-commit rA/master

这为我提供了rA中的所有文件,我想知道我是否可以使用git-filter-branch之类的命令来排除d3d4?或者我对如何处理和管理存储库有一个非常错误的概念?

感谢。

更新

我通过以下方式实现了这一目标:

  1. 将我现有的存储库复制(cp -R)到目录。
  2. 在这个新目录上执行此命令:

    git filter-branch --index-filter'git rm --cached -rgit ls-tree --name-only --full-tree -r $ GIT_COMMIT | grep -Ev“^ dirs | to | be | included”| xargs -r git rm --cached -r; fi' - --all

  3. 继续我前面提到的步骤。

1 个答案:

答案 0 :(得分:2)

在将rA添加到rB之前,您可以先将rA分成两部分(以便只获取所需的目录)。

但是,简单的合并可能会有很多冲突,因为拆分会重写rA中的所有SHA1。
这意味着rA和rB可能共享的任何共同历史都将丢失。

您的合并(-s ours)允许来自rA的文件出现在rB中。