straight.el 终于增加了浅克隆的支持

这个 commit 增加了浅克隆的支持。现在有一个 :depth 关键字,或者用 straight-vc-git-default-clone-depth 变量也可指定默认 depth。

试了一下,原本我的 straight 文件夹占 330 MiB,深度改为 1 以后减小到了 120 MiB,下载所有包的速度也快了不少。不过感觉没有达到想象中的瘦身效果。 另外就是如果某个包的版本被 lockfile 锁起来了,这个参数就没用了,所以反而会抵消 straight.el 的一部分优势,有点食之无味弃之可惜的感觉。。。

Update: 以上的测试结果不可信,因为制杖的俺没有切到 develop 分支。实际上可以减少到 46.8 MiB。具体请见五楼

2 个赞

刚看了下我本地的 elpa 目录,总共 260 个包,62MB。如果是用 git-submodule 是多大呢?会不会depth =1大小就很接近了?

那什么,在下没有太 get 到你的意思 :rofl:,在下的配置没有用 git submodule,straight.el 也不支持 git submodule。straight.el 的原理是把包克隆到 straight/repos 目录,然后在 straight/build 目录产生字节码、autoload 文件和软链接,然后把这边的目录加到 load-path 里。你或许会对这些数据感兴趣:

  • straight/repos:31 个子目录,共 112.8 MiB。占地面积前五名是:

    • evil,43 MiB
    • emacs-doom-themes,7.7 MiB
    • swiper,7.1 MiB
    • all-the-icons.el,3.6 MiB
    • emacs-which-key,3.2 MiB

    进一步的观察表明这些空间基本都是 packfile 占了。

  • straight/build:34 个子目录,共 7.4 MiB。各子目录基本都在 KiB 级别,只有 doom-themes 一枝独秀,占了 4.2 MiB。

其实在下的配置还没搞完,这么看的话,估计搞完以后会非常占地了 :rofl:

我的意思就是这么搞太占空间了。我就是想用个 package,结果搞一堆东东给我。是否是用法不对?

你说的好像是对的,我手动克隆了下 evil,深度是 1,并没有那么大。容我排查下,感谢提醒 :rofl:

Update: 破案了。只是因为我的 straight.el 没有切到 develop branch,我还觉得它好像没有 develop branch 来着 :rofl:

那么重新认真地报告一下:straight 目录现在占 46.8 MiB,其中 repos 目录 39.3 MiB,build 目录 7.3 MiB,还是很可观的。不过不能锁版本感觉还是有点可惜。。。

单纯的用,当然没有必要使用submodule,用submodule还是开发方便,上次给telega提交PR,直接github上fork一份,本地添加remote后pull,切换branch开始写。写完功能后push,然后PR,一气呵成。不用麻烦别的

其实乃这个还不算变化很大。

印象最深的两个, org 和 python-mode(这两个原来分别占着几百MB,现在加起来只有 20MB 不到…

1 个赞

啊,这确实是相当好了。在下用的 org 还是 Emacs 自带的那个所以没啥感觉 :rofl:

话说刚刚仔细读了下作者的想法,他想要的效果是,可以生成任何版本的 tarball 然后拉下来(我没想到怎么弄),然后要开发那个包的时候再 clone 仓库代替它。感觉这个方案很完美

你这图片是终端还是emacs 怎么还能带图的

终端啊… 不过我这里,无论是 Emacs 里面还是终端里面,都能显示图片的(没问题

去年使用过 Straight,还没删掉,我没装 Org Mode:

~/.emacs.d/straight/repos $ du -hs * | sort -rh | head
736M	epkgs
156M	CMake
149M	language-detection.el
135M	elpa
 43M	helm
 41M	melpa
 40M	chess
 29M	magit
 29M	flycheck
 24M	w3m
~/.emacs.d/straight/repos $ du -sh
1.8G	.
~/.emacs.d/straight/repos $

果然后发才有优势,straight 这些已实现和没实现的功能 el-get 都有,不过 el-get 有一件事做傻逼了:自己管理 recipes,直接用 MELPA 的多省事。

depth = 1 差不多也得 package 的两倍大小了。

首先 .git 就是一份完整的源代码了,它之外又是一份。其次,package 只包含实现功能的 el 文件,源代码包括文档、测试、截图等等各种资源。

1 个赞

看来,最明显的就是 epkgs 了(depth = 1 后,从736减到28

我之前尝试用straight,结果好像是load优化还是什么代码,换straight怎么也搞不定,就又试了下submodule,几行代码+magit里按几下就搞定了(主要是非来自github的package声明不用动) :joy:

magit有我写的submodule功能,连代码都不用写,直接快捷键粘贴url就完事