在我的个人git仓库中,我有一个包含数千个不再需要的小图像的目录.有没有办法从整个git历史中删除它们?我试过了
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch imgs" HEAD
Run Code Online (Sandbox Code Playgroud)
和
git filter-branch --tree-filter 'rm -fr imgs' HEAD
Run Code Online (Sandbox Code Playgroud)
但是git repo的大小保持不变.有任何想法吗?
谢谢
Von*_*onC 32
ProGit书中有一个关于删除对象的有趣部分.
它以此结束:
您的历史记录不再包含对该文件的引用.
但是,reflog当你执行filter-branchunder 时,你和Git添加的一组新引用.git/refs/original仍然存在,所以你必须删除它们然后重新打包数据库.在重新打包之前,您需要删除任何指向旧提交的指针:
$ rm -Rf .git/refs/original
$ rm -Rf .git/logs/
$ git gc
$ git prune --expire
Run Code Online (Sandbox Code Playgroud)
(git prune --expire不是强制性的,但可以从松散的对象中删除目录内容)
在执行这些命令之前备份所有内容,以防万一;)
Ant*_*bbs 14
实际上这些技术都不适用于我.我发现最可靠的是简单地将本地拉入另一个回购:
git pull file://$(pwd)/myGitRepo
Run Code Online (Sandbox Code Playgroud)
它还为您省去了删除旧标签的麻烦.
在我的博客上看到这个故事:http: //stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
Mic*_*ael 10
布兰登汤姆森在评论Rainer Blome的解决方案时,如果这只是修复了gitk视图,或者裁判将会真的消失.检查这个的一个好方法是记住旧提交的sha1哈希值(或其唯一前缀)之一并尝试
$ git ls-tree hash-value
Run Code Online (Sandbox Code Playgroud)
这应该显示repos主文件夹的内容,就像它在此提交中一样.后
$ rm -Rf .git/refs/original
$ rm -Rf .git/logs/
Run Code Online (Sandbox Code Playgroud)
如图VonC并除去refs/original/…从线.git/info/refs和.git/packed-refs如由所示莱纳BLOME,最终
$ git gc --prune=now
Run Code Online (Sandbox Code Playgroud)
不仅制作了参考,而且旧的物体(提交,树木和斑点)也消失了.以上所示git ls-tree hash-value证明了这一点.检查这个的另一个很好的命令是git count-objects -v(在filter-brach之前和修剪之后运行它并比较大小).
注意:由于我不允许对其他答案发表评论,我不得不写一个新答案,尽管它主要结合以前给出的答案.
| 归档时间: |
|
| 查看次数: |
43795 次 |
| 最近记录: |