我上传了一个字体文件,我没有权利在几个更新前分发给git hub。我有一个相对不活跃的存储库,我有能力在必要时通知我的所有成员。我尝试了几种解决方案。我需要删除名为Resources\Video\%font%.ttf
的目录中的文件,其中%font%
是字体的简单,斜体和粗体版本的名称。我使用什么命令?
答案 0 :(得分:33)
在这种情况下,您可以使用带有--tree-filter
选项的Git Filter Branch命令。
语法为git filter-branch --tree-filter <command> ...
git filter-branch --tree-filter 'rm -f Resources\Video\%font%.ttf' -- --all
关于命令的说明:
<强>&LT; command&gt;:指定任何shell命令。
<强> - 树滤波器:强> Git会检查每个提交到工作目录,运行你的命令, 并重新提交。
<强> - 所有强> 过滤所有分支中的所有提交。
注意:请检查文件的路径,因为我不确定文件路径
希望这能帮到你!!!
答案 1 :(得分:7)
根据 git 官方文档,使用 git filter-branch
is strongly discouraged,推荐的方法是使用贡献的 git-filter-repo 命令。
Install 它(通过包,或使用包 python3-pip,执行 pip install)。
驱魔命令filename
is then:
git filter-repo --invert-paths --path filename
--invert-paths
选项表示排除,不包括以下路径。
答案 2 :(得分:2)
从所有提交中删除文件
git filter-branch --prune-empty --index-filter "git rm --cached -f --ignore-unmatch NAME_OF_FILE_YOU_WANT_TO_REMOVE" --tag-name-filter cat -- --all
从所有提交中删除整个目录
git filter-branch --prune-empty --index-filter "git rm --cached -rf --ignore-unmatch NAME_OF_DIRECTORY_YOU_WANT_TO_REMOVE" --tag-name-filter cat -- --all
您可以检查,包括文件在内的提交已被修改,并且仅从日志中删除了该文件的提交。使用 gitk
或 git log
检查。
所用选项的说明
--prune-empty
--index-filter
--tag-name-filter
--
--all
关注 --
-r
答案 3 :(得分:0)
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Resources\Video\%font%.ttf' HEAD
比--tree-filter
快得多(最高100倍),因为它仅更新git历史记录而不更新工作目录。
ref:What is the difference between "--tree-filter" and "--index-filter" in the "git filter-branch"?
参考:https://git-scm.com/docs/git-filter-branch
答案 4 :(得分:0)
我正在尝试:从存储库中删除敏感数据和历史记录,
在尝试上述解决方案时。我找到了这个youtube视频,它对我有效: 以video为参考:
命令: 我们需要在以下命令中以git根目录和文件的用户相对路径形式运行此命令。
$ git filter-branch --index-filter 'git rm --cache --ignore-unmatch /root-app/props/password.properties' HEAD
输出:
$ git filter-branch --index-filter 'git rm --cache --ignore-unmatch ./root-app/props/password.properties' HEAD
Rewrite 7243bb0ad4f3aca3a35e2b5ca86926856e77b666 (14860/14864) (1011 seconds passed, remaining 0 predicted) rm 'root-app/props/password.properties'
Rewrite 36c00b1203edf35321c0a0204e2fcb6341a5436d (14860/14864) (1011 seconds passed, remaining 0 predicted) rm 'root-app/props/password.properties'
Rewrite d6bf5d98ec548113f47b9dc7b6dcecf357fdf8db (14860/14864) (1011 seconds passed, remaining 0 predicted) rm 'root-app/props/password.properties'
我希望它也对其他人有用。