Multithreading “我该怎么办?”;git pull“;以多线程还是高效的方式?

Multithreading “我该怎么办?”;git pull“;以多线程还是高效的方式?,multithreading,git,bash,Multithreading,Git,Bash,我有一个名为“projects”的目录,它是父目录,在将近200个子目录中,这些子目录是我的项目 现在,我正在按照脚本执行git pull #!/bin/bash find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull && echo -e '-------------------- \n ' " \; 有什么有效的方法可以以多线程和更快的方式完成这个过程

我有一个名为“projects”的目录,它是父目录,在将近200个子目录中,这些子目录是我的项目

现在,我正在按照脚本执行git pull

#!/bin/bash  
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull && echo -e '-------------------- \n ' " \;

有什么有效的方法可以以多线程和更快的方式完成这个过程吗?

注意,如果嵌套的repo被声明为,那么简单的
git子模块更新--remote
就足够了

也就是说,只要你有。
另见“”

但是,这些更新(包括拉)将不是多线程的(,但是对于获取部分也是如此

多线程仅用于一次操作,如前所述:

如果使用编译,则一些选定的操作是多线程的 线程支持(即,在构建时不要设置
无线程

但是对象打包(在获取/推送期间以及在git gc期间使用)是多线程的(至少它的增量压缩部分是)

git可能会分叉以执行某些异步操作。
例如,在获取过程中,一个进程运行pack对象来创建输出,另一个进程讲git协议,主要是将输出传递给客户端。
在具有线程的系统上,其中一些操作是使用线程而不是fork执行的。
这不是关于CPU性能,而是关于保持代码简单(并且不能通过配置控制)


所有这些都意味着,作为注释,您需要自己编写这些git pull更新的脚本,以便对这些命令进行多线程处理


有关脚本解决方案,请参见“”。

所有子目录都不具有相同的git存储库,也不具有相同的git存储库。因此,现在我正在解决以下问题

#!/bin/bash
find . -type d -name '.git' -print0 | xargs -P 40 -n 1 -0 -I '{}' sh -c "cd \"{}\"/../ && git pull && pwd && echo -e '-------------------- \n ' " \;
  • find.
    -从当前工作目录开始查找(默认情况下递归)
  • -键入d-name.git'
    -查找所有具有.git目录作为子目录的目录
  • -print0
    -作为xargs输入的目录列表
我还发现了一些很好的帮助

虽然它包含了相当多的有用信息,但实际上它根本没有处理OP问题中的情况,也没有提供任何解决OP问题的方法。@EtanReisner,因为据我所知,没有git本机解决方案:默认情况下,多git pull不是多线程的。他的存储库是不更新的你不需要git本机解决方案。你假设了一种不存在的情况,这将你自己带入了一个不需要存在的问题。使用
xargs
并行
目录列表。