将未跟踪的文件移动到新的git存储库并保留目录结构

时间:2015-07-03 14:33:54

标签: git bash

我使用敏感信息向git存储库old-project做了一些错误的提交,其中包含大量未跟踪的数据和输出文件。此repo是从上游存储库project克隆的,该存储库不包含数据文件。我使用BFG Repo Cleaner清除了project repo历史记录中的错误提交。

现在,我想制作一个已清理的new-project回购的新克隆project,即

git clone git://example.com/project new-project

然后将数据文件从old-project移动到new-project并保留其目录结构。

我最初的想法是

cd old-project
git ls-files --others --exclude-standard

然后mv生成xargs的文件,但我想知道是否有适当的'这样做的方式。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用git filter-branch对每次提交执行操作并删除不再需要的文件。如果您有一个结构为oldstuff/newstuff/的存储库,则可以运行:

git filter-branch --subdirectory-filter newstuff -- --all

您将留下一个存储库,其中重写标记和分支,以便只存在newstuff/中出现的文件。

如果要删除某些文件类型(例如*.log),则可以执行类似的命令:

git filter-branch --tree-filter 'rm -f *.log' -- --all

如果您在后续级别中有日志文件,则需要适当调整命令,例如:与xargs