偶尔我会把一个DVD-rip放到一个网站项目中,然后不小心git commit -a -m ...,然后,zap,回购邮件被2.2演出臃肿.下次我做了一些编辑,删除了视频文件,并提交了所有内容,但是历史记录中的压缩文件仍然存储在存储库中.
我知道我可以从那些提交开始分支并将一个分支重新绑定到另一个分支.但是我应该怎么做才能将2个提交合并在一起,以便大文件没有在历史记录中显示并在垃圾收集过程中被清除?
遇到了存储库的问题,并尝试了几乎所有可能的配置设置,例如.pack.WindowMemory等等
我相信有人已经检查了一个大文件到远程存储库,现在每次我尝试拉动或推送它时,GIT会尝试打包它并耗尽内存:
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 6279, done.
Compressing objects: 100% (6147/6147), done.
fatal: Out of memory, malloc failed (tried to allocate 1549040327 bytes)
error: failed to run repack
Run Code Online (Sandbox Code Playgroud)
尝试过各种选项的git gc&git repack,但仍然返回相同的错误.
几乎放弃了,即将创建一个新的回购,但我想先问一下:)
我有一个Git存储库我存储随机的东西.大多是随机脚本,文本文件,我设计的网站等等.
我随着时间的推移删除了一些大型二进制文件(通常为1-5MB),它们会增加存储库的大小,这在修订历史中是不需要的.
基本上我希望能够做到..
me@host:~$ [magic command or script]
aad29819a908cc1c05c3b1102862746ba29bafc0 : example/blah.psd : 3.8MB : 130 days old
6e73ca29c379b71b4ff8c6b6a5df9c7f0f1f5627 : another/big.file : 1.12MB : 214 days old
Run Code Online (Sandbox Code Playgroud)
..然后能够查看每个结果,检查是否不再需要然后删除它(可能使用filter-branch)
是否有可能获得有关每次提交中的更改浪费了多少空间的信息 - 因此我可以找到添加大文件或大量文件的提交.这都是为了尝试减少git repo大小(重新定位和过滤提交)
我在使用带有MINGW64的git 2.7.2.windows.1的Windows机器上.
我有一个脚本 C:/path/to/scripts/myScript.sh
如何从我的git bash执行此脚本?
可以将其添加到.bashrc文件中,然后只执行整个bashrc文件.
但是我想将脚本添加到单独的文件中并从那里执行它.
我想在我的存储库中找到10个最大的文件.我想出的脚本如下:
REP_HOME_DIR=<top level git directory>
max_huge_files=10
cd ${REP_HOME_DIR}
git verify-pack -v ${REP_HOME_DIR}/.git/objects/pack/pack-*.idx | \
grep blob | \
sort -r -k 3 -n | \
head -${max_huge_files} | \
awk '{ system("printf \"%-80s \" `git rev-list --objects --all | grep " $1 " | cut -d\" \" -f2`"); printf "Size:%5d MB Size in pack file:%5d MB\n", $3/1048576, $4/1048576; }'
cd -
Run Code Online (Sandbox Code Playgroud)
是否有更好/更优雅的方式来做同样的事情?
"文件"是指已经检入存储库的文件.
所以,让我在这个问题前面说,我知道以前有关Stackoverflow主题的问题.事实上,我已经尝试了所有可以找到的解决方案但是我的仓库中有一个二进制文件,只是拒绝被删除并继续大大膨胀我的仓库大小.
方法我试过,
这两个都是由Darhuuk 完全从git repo中删除文件的答案推荐的
但是,在尝试这两种解决方案之后,在git中查找大文件的脚本仍然会找到违规的二进制文件.但是,此答案中的脚本不再找到二进制文件的提交.这个答案都提出了这两个脚本.
在尝试移除后,回购仍然是44mb,这对于相对较小的源来说太大了.大文件脚本正在做哪些工作正常工作.我已经尝试过推到github(我做了一个叉子以防万一),然后做一个新的克隆,看看回购大小是否减少,但它仍然是相同的大小.
有人可以解释我做错了什么或建议替代方法吗?
我应该注意到,我不仅仅想从我的本地仓库修剪文件,我还希望能够在Github上修复远程仓库.
我看过几篇关于如何从所有 git 历史记录中删除单个文件的文章和问题。示例:如何从 Git 存储库的提交历史记录中删除/删除大文件?
\n我想要做的是删除当前不存在于 master 分支头部的所有文件。
\n我的用例是,我small从一个整体存储库(称为 )中分离出一个较小的存储库(称为monolith)。我想在创建时保留 git 历史记录small,但仅保留相关的git 历史记录。
首先,我small在 GitHub 上创建了一个新的存储库。然后,在我的笔记本电脑上,我将其作为远程名称添加origin-small到我的本地monolith存储库中,并将 master 分支的当前状态推monolith送到origin-small。
origin-small然后,我从 中删除了远程monolith,更改了目录,并small从 GitHub 进行了克隆。Voil\xc3\xa0,我有一份原始存储库的副本,monolith及其完整的历史记录。
但是,历史上有大量文件small不再相关,并且它们使存储库变得臃肿。
我想做的是:
\nsmall。有没有办法用一个命令来做到这一点?或者我是否需要git filter-branch为每个要删除的文件/目录运行一次?
Bitbucket警告我的Git存储库超过1 GB.实际上,在Repository details页面中它表示它是1.7 GB.太疯狂了.我必须在版本控制中包含大数据文件.我的本地存储库实际上是10 GB,这意味着至少我在.gitignore某种程度上成功地使用了从版本控制中排除大文件.
接下来,我按照https://confluence.atlassian.com/display/BITBUCKET/Reduce+repository+size中的教程,尝试删除未使用的大数据.files.git count-objects -v我的repo顶级文件夹中的命令返回以下内容:
count: 5149
size: 1339824
in-pack: 11352
packs: 2
size-pack: 183607
prune-packable: 0
garbage: 0
size-garbage: 0
Run Code Online (Sandbox Code Playgroud)
大小包183607 KB远小于1.7 GB.我有点困惑.
接下来,我下载了BFG Repo Cleaner https://rtyley.github.io/bfg-repo-cleaner并java -jar bfg-1.12.3.jar --strip-blobs-bigger-than 100M在顶级目录中运行命令,从所有非最新提交中删除大于100 MB的文件.但是,BFG返回以下消息:
Warning : no large blobs matching criteria found in packfiles
- does the repo need to be packed?
Run Code Online (Sandbox Code Playgroud)
重复相同的50M导致相同.
这是否意味着所有大于50 MB的文件都在最新提交中?在Bitbucket的源代码浏览器中,我查看了包含大型数据文件的文件夹,但不包含这些文件(成功忽略).
任何人都可以简要解释一下存储库大小混乱的原因是什么,以及存储库中大文件的存在?
git ×9
bitbucket ×1
commit ×1
executable ×1
find ×1
git-bash ×1
git-rebase ×1
github ×1
statistics ×1
windows ×1