我正在尝试将一个单独的文件(称为foo.txt)从一个仓库移动到另一个(无关的)仓库,并保留其历史记录。ebneter's question显示了如何对子目录执行此操作。taw's question提供了一些提示和建议,但没有详细的步骤。jkeating's question看起来很有前途,但对我没有用。在谷歌搜索中,没有找到这个特定的用例。我正在寻找一系列清晰的命令来完成这个任务。
我开始遵循的命令序列是这样的:
我的筛选命令逻辑是使用
我的意图是将 source-repo-copy 设置为目标代码库(target-repo)的远程仓库,并假设
此时,我不知道该如何继续了。有什么建议吗?
我开始遵循的命令序列是这样的:
$ git clone source-repo/ source-repo-copy
$ cd source-repo-copy
$ git filter-branch --tree-filter 'test ! "$@" = "foo.txt" && \
git rm --cached --ignore-unmatch $@ || true' --prune-empty
我的筛选命令逻辑是使用
git rm
删除所有不是 foo.txt 的文件。我在命令中添加了 || true
,以强制其返回零值,以满足 filter-branch 的要求。我的意图是将 source-repo-copy 设置为目标代码库(target-repo)的远程仓库,并假设
git filter-branch
过滤掉除 foo.txt 以外的所有内容,然后将 source-repo-copy 拉取并合并到 target-repo 中。不幸的是,git filter-branch
命令似乎没有产生任何影响。它没有出现任何错误,并且似乎已经处理完 source-repo 中的 600 多个提交,但是当它完成后,git log
和 source-repo-copy 中的文件看起来都没有变化。难道不应该只剩下 foo.txt 文件,所有未涉及该文件的提交都从日志中消失吗?此时,我不知道该如何继续了。有什么建议吗?