git消耗更少磁盘空间的最佳方法是什么?
我在我的存储库上使用git-gc(这确实有帮助,特别是如果自克隆以来已经有很多提交)但我想建议是否有任何其他命令来缩小git使用的磁盘空间.
谢谢
我有一个克隆.我想减少它的历史,而不是从头开始克隆,减少深度.工作示例:
$ git clone git@github.com:apache/spark.git
# ...
$ cd spark/
$ du -hs .git
193M .git
Run Code Online (Sandbox Code Playgroud)
好吧,所以不是这样,但它会为这次讨论服务.如果我尝试gc它会变小:
$ git gc --aggressive
Counting objects: 380616, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (278136/278136), done.
Writing objects: 100% (380616/380616), done.
Total 380616 (delta 182748), reused 192702 (delta 0)
Checking connectivity: 380616, done.
$ du -hs .git
108M .git
Run Code Online (Sandbox Code Playgroud)
尽管如此,相当大(git pull表明它仍然可以向遥控器推送/拉动).重新包装怎么样?
$ git repack -a -d --depth=5
Counting objects: 380616, done.
Delta compression using up to 4 …Run Code Online (Sandbox Code Playgroud) 我正在尝试取消浅层存储库:
% /bin/git clone --shallow-since='3 years' 'https://github.com/RobertAudi/zsh-hooks'
Cloning into 'zsh-hooks'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 17 (delta 6), reused 12 (delta 4), pack-reused 0
Unpacking objects: 100% (17/17), 5.29 KiB | 1.76 MiB/s, done.
% cd zsh-hooks && git remote -v
origin https://github.com/RobertAudi/zsh-hooks (fetch)
origin ssh://github.com/RobertAudi/zsh-hooks (push)
% git fetch --unshallow origin
fatal: error in object: unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
fatal: the remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
我也尝试过将原点更改 …
标题基本上.
我只是混一些事情与我.gitignore和我的臃肿.gitDIR到> 100MB(它与总喜欢100commits回购..).
所以我是一个懒惰的人,并想知道是否有可能删除我的历史.我不想改变某些东西或东西,我只是想缩小我的.git目录尺寸.
当没有办法做到这一点时,我只是让git clone --depth 1我的回购获得同样的效果.
I have a git repository that, when just checked out, takes around 2.3 GiB even in the shallowest configuration, of which 1.9 GiB is inside .git/objects/pack. The working tree files are just about .5 GiB.
Considering I have a remote from which I can re-fetch all the objects if needed, the question is:
.git everything that I could then re-fetch safely, with simple git commands, from the remote?Testing a bit, …
有没有一种方法可以让git pullkeepdepth=1只使用最新的提交,而不是 git clone 所做的提交(如果有更新的提交)?
我做git clone -b some_branch --depth=1 git_repo.git
它以最小的空间使用量克隆存储库,因为它删除了所有历史记录。现在,如果我需要再次更新该存储库并使用git pull,它会提取整个历史记录。
这里有一个类似的问题:
如果尝试接受答案建议并使用git pull --unshallowthen git pull --depth=1,看起来它不会像git clone --depth=1以前那样减少空间。
因此,真正减少存储库大小的唯一方法就是删除存储库并depth=1再次克隆?看起来有点笨拙的方法。
我需要这个的原因是,完全克隆时使用了一些存储库,目前的~3 GB大小大约是这样。使用它的环境大约有 40 个。所以总的来说,它使用了大量的空间。如果是浅克隆,可以减少5倍左右。
样本:
克隆此存储库分支 12.0 git@github.com:odoo/odoo.git,显示其大小约为 3 GB。
使用 克隆此存储库分支 12.0 depth=1,显示大小为 643 MB。
使用--unshallowon pull 然后(按照此处的建议将 git 存储库转换为浅层?):
git pull --depth 1
git gc --prune=all
Run Code Online (Sandbox Code Playgroud)
似乎没有像浅克隆那样缩小大小。
如何将存储库的深层克隆就地转换为浅拷贝?
我正在使用 git 管理软件的单独安装,以跟踪安装运行时对代码的任何更改(未跟踪和脏文件),但存储库非常大(800MB),因此大约有数百个副本这不是最好的主意。
因此,如果这些存储库可以转换为仅包含当前部署的提交而不是完整树的浅表副本,那就太好了。在升级期间,存储库将被转换回深度克隆,检出特定提交,然后变成新提交的浅层克隆。
git fetch --depth=1 --update-shallow不会缩小 .git 目录大小,我猜它会获取任何新的提交,但不会删除旧数据。添加--shallow-exclude=HEAD^2会使 git 抛出错误,但不完全确定它应该如何工作,我会冒险猜测删除 HEAD^2 会产生冲突的要求,但想要检查 HEAD,这将取决于深度克隆中的 HEAD^2。
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud) 在某些情况下,存储整个 git 历史记录(例如构建机器人)没有用。
是否可以对 git 存储库(master例如,具有单个分支)进行浅层克隆,并使其保持最新状态,同时保持浅层?
git clone --depth=1我能否在具有所有历史记录的本地已克隆存储库上实现结果,而目标是将所有被忽略的文件保留在适当的位置?
我有几个占用大量空间的 Git 项目,我想删除所有 Git 历史记录以释放一些空间。
更准确地说:
assume-unchanged必须保留状态的配置文件这些原因可以清楚地说明为什么我不想在 30 个存储库上重新克隆和设置所有凭据和内容。
理想情况下,我正在寻找甚至可以在所有项目上批量运行的东西。如果没有这样的事情,那我当然没问题。