【发布时间】:2012-05-18 11:15:56
【问题描述】:
我正在尝试将单个文件(称为 foo.txt)从一个存储库移动到另一个(不相关的)存储库,并保留其历史记录。 ebneter's question 显示如何对子目录执行此操作。 taw's question 有一些提示和建议,但不是一个循序渐进的过程。 jkeating's question 看起来很有希望,但对我不起作用。对于这个特定的用例,谷歌搜索是空的。我正在寻找的是完成此任务的明确命令序列。
我开始执行的命令顺序是这样的:
$ 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,以强制它具有零返回值以满足过滤器分支。
我的意图是将 source-repo-copy 设置为我的目标存储库 (target-repo) 的远程,并假设 git filter-branch 过滤掉除 foo.txt 之外的所有内容,获取并将 source-repo-copy 合并到 target-回购。不幸的是,git filter-branch 命令似乎没有任何效果。它运行时没有出现任何错误,并且似乎通过了 source-repo 中的 600 多个提交,但是当它完成时,git log 和 source-repo-copy 中的文件看起来是一样的。除了 foo.txt 之外的所有文件都不应该丢失,并且所有没有触及它的提交都应该从日志中消失吗?
此时我不知道如何继续。有什么建议吗?
【问题讨论】:
标签: git git-filter-branch