我的情况是,许多庞大的JPG已经进入我们的仓库,增加了100多个MB,远远超过了src代码本身。
我已经优化了这些JPG,其文件大小消耗不到1/20,否则没有可察觉的变化。承诺并推迟。
但是,本地副本仍然会在.git存档中使用此磁盘空间(内部包含所有文件的所有先前版本)。任何新的拉动也会浪费这个空间。
我们的原创大师是Bitbucket。
我花了很多时间试图从像
这样的好导游中找到答案 git gc
或 http://linux.yyz.us/git-howto.html
和 How to remove local (untracked) files from the current Git working tree? 这表明
git clean -n
什么可能只是简单地从档案中的一个特定提交中清除这些巨大的JPG文件,甚至从在线Bitbucket仓库清除,所以没有人必须再次提取它们? 我们当然想要
我们不想要的大型JPG版本文件的回购中没有先前版本。
我尝试过的事情:
du 72195 ./.git
git verify-pack -v .git/objects/pack/pack-*.idx |sort -k 3 -n |tail -39 ... 03bcb7d79c1e0a4328420bf00647319465d5d3df blob 2446210 2430913 46915147 52ea2d848645463e01d3dd143dd8d7fd24019335 blob 2467254 2443333 27573576 12d63348c0e87f9602d395e694df6a94601c12f7 blob 2506409 2485495 49346060 645fe7bfaf6ecd0140d144b4c40c19e78f103bd6 blob 2581349 2554398 10567725 72672204aa3c7aec431cba02b32ac012e52e601d blob 3084793 3041294 13122123
git rev-list --objects --all |grep 72672204 72672204aa3c7aec431cba02b32ac012e52e601d images/2.jpg
git log --pretty=oneline --branches -- images/2.jpg 98dc75de48a63c2ab9661eb62895ac39ef331aaa MAPSDH-10 #time 30m #comment Grab live copy of Simon's source and push it onto Bitbucket repo; master@gordito,2014-04-10_13-55-02 3e7f36f0b1a913feaf43547bca4ad3a5a08957a6 MAPSDH-10 #time 30m #comment Grab live copy of Simon's source and push it onto Bitbucket repo; master@gordito,2014-04-10_13-31-49
git filter-branch --index-filter 'git rm --cached --ignore-unmatch images/2.jpg' -- 3e7f36f0^.. Cannot rewrite branches: You have unstaged changes.
git rm --cached --ignore-unmatch images/2.jpg rm 'images/2.jpg'
但是,我希望images/2.jpg
的当前版本仍然在回购中!
计算本地git档案的文件空间使用情况:
git count-objects -v count: 0 size: 0 in-pack: 284 packs: 1 size-pack: 72101 prune-packable: 0 garbage: 0 size-garbage: 0
du
)。无论如何,它似乎没有按预期释放3084793(3MB)。答案 0 :(得分:1)
嗯,您在历史记录中获得了这些图片,您应该重写历史记录并永久删除它们。
我已经编写了一个脚本,可以永久地从git中删除文件(包含历史记录),这里是:
#!/bin/bash
git filter-branch -f --prune-empty -d /dev/shm/scratch \
--index-filter "git rm --cached -f --ignore-unmatch $1" \
--tag-name-filter cat -- --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
您可以删除所有文件,然后删除它 - 提交新文件。
更多信息:http://git-scm.com/book/ch6-4.html
P.S。如果你想使用通配符 - 使用像for i in *.jpg; do git-rm-forever $i; done