相关疑难解决方法(0)

减少git存储库大小

我试图寻找一个关于减少回购规模的好教程,但没有找到.我如何减少我的repo大小...它大约10 MB,但事情是Heroku只允许50 MB,我不在附近完成开发我的应用程序.

我已经将通常的嫌疑人(日志,供应商,文档等)添加到.gitignore.虽然我最近只添加了.gitignore.

有什么建议?

git git-clean

267
推荐指数
3
解决办法
12万
查看次数

如何从我的git仓库中删除未引用的blob

我有一个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

113
推荐指数
6
解决办法
7万
查看次数

从git存储库中删除文件(历史记录)

(解决了,看到问题正文的底部)现在
寻找这个,我现在拥有的是:

几乎相同的方法,但它们都将对象留在包文件中......坚持.
我尝试了什么:

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 :(

解决方案:这是摆脱文件的最短路径:

  1. 检查.git/packed-refs - 我的问题是我有refs/remotes/origin/master一个远程存储库的行,删除它,否则git将不会删除这些文件
  2. (可选) git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort …

git version-control git-rewrite-history

76
推荐指数
4
解决办法
3万
查看次数

git,所有分支上的filter-branch

我正在使用以下来源从我的存储库中删除一些大型文件和目录:

http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/

为什么我的git存储库这么大?

git filter-branch 似乎只能在当前分支上工作 - 是否有办法立即将其应用于所有分支?

git git-filter-branch git-rewrite-history

50
推荐指数
3
解决办法
2万
查看次数

Git - 从SHA1中查找文件名

我在索引中添加了一个文件:

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 sha1

34
推荐指数
3
解决办法
2万
查看次数

如何找出哪些文件占用了git repo中最多的空间?

我需要让回购更小.我想我可以通过从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)

git

24
推荐指数
3
解决办法
2814
查看次数

git:找不到blob - 想从包中摆脱它

我想要摆脱一大块斑点!我以为我使用这个解决方案删除了​​文件: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 git-rewrite-history

12
推荐指数
2
解决办法
1478
查看次数

Git子模块没有额外的重量

我还不是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的帮助下,我提出了以下设置:

  • 我的骨架repo将WordPress作为一个子模块,整个原始回购与历史
  • 当从骨架创建一个新项目时,我将克隆它而不使用--recursive选项来只获取子文件的主文件和空文件夹
  • 如果我需要具有完整历史记录的WordPress - 例如,如果我需要在不同的WP分支/标签之间切换以测试我的插件/主题向后兼容性 - 那么我将获得具有完整历史记录的子模块
  • 如果我只是需要一个简单的干净安装最近的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)

不是一个完美的解决方案(我想尽可能地自动化所有东西),但它现在有效.

对原始问题的任何建议表示赞赏.

git github git-submodules

12
推荐指数
1
解决办法
6223
查看次数

如何从git repo中删除blob

我不小心在我的仓库中添加了一个数据库转储(超过1 GB),推了几天后注意到了这一点.我使用git filter-branch删除文件,过期的reflog并运行git gc来修剪未使用的对象,但数据库转储blob仍在repo中.我用过 哪个提交有这个blob?,但确实发现任何提交有blob的提交.如何删除这个或如何找出它在git gc期间没有被删除的原因?

git version-control

8
推荐指数
1
解决办法
6023
查看次数

为什么我的.git文件很大?

我不小心在git目录中添加并提交了一些非常大的(100MB +)PSD文件.我们在目录中对这些文件进行了大量编辑,但后来意识到它们不应该存在并从目录中删除它们.

然后我跑了:

git add --all && git commit -m "Removed large psds"
Run Code Online (Sandbox Code Playgroud)

我的目录中的文件现在加起来不到十几MB,但.git文件本身除外,这是700MB +.

这里发生了什么?它是否保留已删除的.PSD文件的旧版本?这是否意味着git不会清除从删除文件中获得的空间?我如何完全忘记这些文件,以便我可以将.git文件大小调低?

git git-rewrite-history

5
推荐指数
1
解决办法
5048
查看次数

如何从bitbucket中的旧提交中删除大文件

几个月前我做了一些糟糕的提交后,我的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 github bitbucket

5
推荐指数
1
解决办法
1746
查看次数

Git存储库大小比它应该大

所以我在个人服务器上使用git,我有一个旧的仓库,我需要更新.我删除了一堆旧文件并提交并推动了更改.我在我的服务器上使用Web UI(Gitlist).当我使用这个GUI下载repo作为zip文件时,它的大小正确,大约41MB.然而,当我克隆回购时,由于其中一个./git/objects/pack文件的大小约为900MB ,因此它更接近于演出.

当它真的应该小得多时,为什么回购如此之大?

git

3
推荐指数
1
解决办法
1619
查看次数