执行;git子模块foreach“;并行

执行;git子模块foreach“;并行,git,parallel-processing,git-submodules,Git,Parallel Processing,Git Submodules,有没有办法并行执行git submodule foreach命令,类似于--jobs 8参数如何与git submodule update一起工作 例如,我们工作的一个项目涉及近200个子组件(子模块),我们大量使用foreach命令对其进行操作。我想加快速度 PS:如果解决方案涉及一个脚本,我在Windows上工作,并且大多数时间使用git bash。我建议您一个基于解释语言多平台(如Python)的解决方案 进程启动器 首先,您需要定义一个类来管理启动命令的过程 类PFSProcess(

有没有办法并行执行
git submodule foreach
命令,类似于
--jobs 8
参数如何与
git submodule update
一起工作

例如,我们工作的一个项目涉及近200个子组件(子模块),我们大量使用
foreach
命令对其进行操作。我想加快速度


PS:如果解决方案涉及一个脚本,我在Windows上工作,并且大多数时间使用git bash。

我建议您一个基于解释语言多平台(如Python)的解决方案


进程启动器
首先,您需要定义一个类来管理启动命令的过程

类PFSProcess(对象):
def u uu init uuuuu(self、子模块、路径、cmd):
self.\uu子模块=子模块
self.\u路径=路径
self.\uu cmd=cmd
self.\uuu输出=无
self.\uu p=None
def运行(自):
self.\uuuu output=“\n\n”+self.\uuuu子模块+”\n”
self.\u p=subprocess.Popen(self.\u cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True,
cwd=os.path.join(self.\uuuuu路径,self.\uuuu子模块))
self.\u输出+=self.\u p.communicate()[0]。解码('utf-8')
如果self.\u p.communicate()[1]:
self.\u输出+=self.\u p.communicate()[1]。解码('utf-8')
打印(自输出)

多线程
下一步是生成多线程执行。Python在其核心中包含了非常强大的用于处理线程的库。您可以使用它导入以下包:

导入线程
在创建线程之前,您需要创建一个辅助线程,为每个线程调用一个函数:

def worker(子模块列表、路径、命令):
对于子模块列表中的子模块:
PFSProcess(子模块、路径、命令).run()
如您所见,工人收到一个子模块列表。为清楚起见,由于它不在我们的范围内,我建议您查看
.gitmodules
,从中可以生成读取文件的子模块列表



没有内置的方法,您必须使用诸如或之类的外部工具。顺便说一句,我没有试过,不知道它们是否有效。@phd很遗憾,内置方式没有包括在内,我想是因为保证操作之间互斥的复杂性,所以根本不提供更安全,我会看看这些包,谢谢!谢谢!已经在用了!顺便说一句,
i+=1
不应该在子模块循环中的子模块的
内吗?