一直想搞清楚怎么弄,昨天搭建 EmacsWiki ELPA 的时候又遇到了这个问题,像下面这样共有 645 个 Git 仓库需要同步
[email protected]:emacsmirror/a-menu.git
[email protected]:emacsmirror/abbrev-complete.git
[email protected]:emacsmirror/ac-dabbrev.git
...
[email protected]:emacsmirror/keyword-arg-macros.git
[email protected]:emacsmirror/thing-edit.git
[email protected]:emacsmirror/yaoddmuse.git
package-build.el
的做法是在 Emacs 调用 Git 一个一个更新 git clone/fetch
,这样会非常慢,有没有专门的工具或者方法可以同时更新多个 Git 仓库?感觉这样能提高效率。
如果是我的话,就会用python的多进程,开50个进程,每个进程clone 一个repo。
MELPA 有近 4000 个包,每次更新需要 3 个小时,或许不该花这么长时间。
我想你指的是 git-submodule
的 -j
选项吧,这个主意应该可行,有空我试试。
-j <n>, --jobs <n>
This option is only valid for the update command. Clone new
submodules in parallel with as many jobs. Defaults to the
submodule.fetchJobs option.
printf '%s\0' ~/projects/dotfiles/*(/) | xargs -n1 -P8 -0i git --work-tree={} fetch
2 个赞
如果考虑在 Emacs 内部解决的话,等有时间试试 (info "(elisp) Threads")
或者 (info "(elisp) Asynchronous Processes")
/ async-start-process
。如果可行的话,straight.el 中的 straight-fetch-all
会因此收益。