我有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
之类的命令来排除d3
和d4
?或者我对如何处理和管理存储库有一个非常错误的概念?
感谢。
更新
我通过以下方式实现了这一目标:
在这个新目录上执行此命令:
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
继续我前面提到的步骤。
答案 0 :(得分:2)
在将rA添加到rB之前,您可以先将rA分成两部分(以便只获取所需的目录)。
但是,简单的合并可能会有很多冲突,因为拆分会重写rA中的所有SHA1。
这意味着rA和rB可能共享的任何共同历史都将丢失。
您的合并(-s ours
)允许来自rA的新文件出现在rB中。