我试图寻找一个关于减少回购规模的好教程,但没有找到.我如何减少我的repo大小...它大约10 MB,但事情是Heroku只允许50 MB,我不在附近完成开发我的应用程序.
我已经将通常的嫌疑人(日志,供应商,文档等)添加到.gitignore.虽然我最近只添加了.gitignore.
有什么建议?
我有一个GitHub仓库,有两个分支 - 主和发布.
发布分支包含二进制分发文件,这些文件导致了非常大的repo大小(> 250MB),所以我决定清理一下.
首先,我删除了远程发布分支 git push origin :release
然后我删除了本地发布分支.首先我试过git branch -d release,但是git说"错误:分支'释放'不是你当前HEAD的祖先." 这是真的,所以我git branch -D release强迫它被删除.
但是我在本地和GitHub上的存储库大小仍然很大.所以然后我浏览了通常的git命令列表,比如git gc --prune=today --aggressive没有运气.
按照Charles Bailey在SO 1029969的指示,我得到了最大blob的SHA1列表.然后我使用来自SO 460331的脚本 来找到blob ......并且五个最大的不存在,虽然找到了较小的blob,所以我知道脚本正在工作.
我认为这些博客是发布分支中的二进制文件,它们在删除该分支后不知何故.什么是摆脱它们的正确方法?
(解决了,看到问题正文的底部)现在
寻找这个,我现在拥有的是:
几乎相同的方法,但它们都将对象留在包文件中......坚持.
我尝试了什么:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
Run Code Online (Sandbox Code Playgroud)
包中还有文件,这就是我所知道的:
git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3
Run Code Online (Sandbox Code Playgroud)
还有这个:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
Run Code Online (Sandbox Code Playgroud)
相同...
尝试过的git clone技巧,它删除了一些文件(约3000个)但最大的文件仍然存在...
我在存储库中有一些大的遗留文件,大约200M,我真的不希望它们在那里...而且我不想将存储库重置为0 :(
解决方案:这是摆脱文件的最短路径:
refs/remotes/origin/master一个远程存储库的行,删除它,否则git将不会删除这些文件git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort …我正在使用以下来源从我的存储库中删除一些大型文件和目录:
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
git filter-branch 似乎只能在当前分支上工作 - 是否有办法立即将其应用于所有分支?
我在索引中添加了一个文件:
git add somefile.txt
Run Code Online (Sandbox Code Playgroud)
然后我得到了这个文件的SHA1:
git hash-object somefile.txt
Run Code Online (Sandbox Code Playgroud)
我现在有一个SHA1,我想使用SHA1检索索引中对象的文件名.
git show 5a5bf28dcd7944991944cc5076c7525439830122
Run Code Online (Sandbox Code Playgroud)
此命令返回文件内容,但不返回文件名.
如何从SHA1获取完整的文件名和路径?
我需要让回购更小.我想我可以通过从git历史记录中删除有问题的二进制文件来缩小它:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch BigFile'
Run Code Online (Sandbox Code Playgroud)
然后释放对象:
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --aggressive --prune=now
Run Code Online (Sandbox Code Playgroud)
(如果这些命令错误,请随意发表评论.)
问题:如何识别那些大文件,以便我可以评估是否从git历史中删除它们?他们很可能不再在工作树中 - 它们已被删除,并且可能还没有跟踪:
git rm --cached BigFile
Run Code Online (Sandbox Code Playgroud) 我想要摆脱一大块斑点!我以为我使用这个解决方案删除了文件:http:
//dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
(我用过-- --all而不是HEAD删除文件从所有分支机构)
rm -rf .git/refs/original/ && git reflog expire --all &&
git gc --aggressive --prune
Run Code Online (Sandbox Code Playgroud)
我通过这个看了包文件夹为什么我的git存储库这么大?
$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k3n
... last 4 lines:
bc7ae9801052180b283cd81880753549f0f92587 blob 19464809 749446 305054873
acd5f09a35846bec25ebc324738139e5caabc50f blob 294278199 71381636 39607483
986d152935434b56cf182d8a32e24cb57af75ac3 blob 480385718 108184804 110989119
ba9d1d27ee64154146b37dfaf42ededecea847e1 blob 761172819 27430741 277589990
Run Code Online (Sandbox Code Playgroud)
该脚本git-find-blob取自哪个提交有这个blob?
$ ./git-find-blob ba9d1d27ee64154146b37dfaf42ededecea847e1
Run Code Online (Sandbox Code Playgroud)
但它没有找到任何东西.
任何想法如何摆脱我的存储库?
我还不是Git大师,面对一个问题,我无法弄清楚如何修复.我有一个我的WordPress自定义骨架的回购,我已经添加了WordPress作为其原始回购的子模块git submodule add wp_repo_url.当我将我的repo克隆到本地机器时:
git clone --recursive https://github.com/user/repo local_dir
Run Code Online (Sandbox Code Playgroud)
它按预期下载了WP子模块,但问题是这样 - 实际文件只有20.7Mb,而且.git/modules/core/objects/pack我有一个巨大的124Mb .pack文件,我认为这个文件就像提交该子模块的历史/修订一样.
如何在克隆时重新添加子模块或修改以防止下载这个额外的重量?
更新:
在@iclmam的帮助下,我提出了以下设置:
如果我只是需要一个简单的干净安装最近的WP版本,我将改为wp目录并采用旧的方式:
curl -L -O http://wordpress.org/latest.zip
unzip latest.zip
mv wordpress/* .
rm latest.zip
rm -rf wordpress
Run Code Online (Sandbox Code Playgroud)不是一个完美的解决方案(我想尽可能地自动化所有东西),但它现在有效.
对原始问题的任何建议表示赞赏.
我不小心在我的仓库中添加了一个数据库转储(超过1 GB),推了几天后注意到了这一点.我使用git filter-branch删除文件,过期的reflog并运行git gc来修剪未使用的对象,但数据库转储blob仍在repo中.我用过 哪个提交有这个blob?,但确实发现任何提交有blob的提交.如何删除这个或如何找出它在git gc期间没有被删除的原因?
我不小心在git目录中添加并提交了一些非常大的(100MB +)PSD文件.我们在目录中对这些文件进行了大量编辑,但后来意识到它们不应该存在并从目录中删除它们.
然后我跑了:
git add --all && git commit -m "Removed large psds"
Run Code Online (Sandbox Code Playgroud)
我的目录中的文件现在加起来不到十几MB,但.git文件本身除外,这是700MB +.
这里发生了什么?它是否保留已删除的.PSD文件的旧版本?这是否意味着git不会清除从删除文件中获得的空间?我如何完全忘记这些文件,以便我可以将.git文件大小调低?
几个月前我做了一些糟糕的提交后,我的bitbucket repo变得非常大(1.6 GB).我没有意识到情况有多严重(noob ..),因为一个同事试图克隆它并且失败了(太大了).
我仔细阅读了这篇文章为什么我的git存储库如此之大?并做了以下(如@Vi建议):
检测我的仓库历史记录中的胖文件
git rev-list --all --objects | sed -n $(git rev-list --objects --all | \
cut -f1 -d' ' | \
git cat-file --batch-check | \
grep blob | \
sort -n -k 3 | \
tail -n40 | \
while read hash type size; do
echo -n "-e s/$hash/$size/p ";
done) |
sort -n -k1
Run Code Online (Sandbox Code Playgroud)
假设其中一个胖文件是mybigfile.gz
从repo中删除mybigfile.gz
git filter-branch -f --index-filter \
'git rm --force --cached --ignore-unmatch mybigfile.gz' \
-- …Run Code Online (Sandbox Code Playgroud)所以我在个人服务器上使用git,我有一个旧的仓库,我需要更新.我删除了一堆旧文件并提交并推动了更改.我在我的服务器上使用Web UI(Gitlist).当我使用这个GUI下载repo作为zip文件时,它的大小正确,大约41MB.然而,当我克隆回购时,由于其中一个./git/objects/pack文件的大小约为900MB ,因此它更接近于演出.
当它真的应该小得多时,为什么回购如此之大?