我可以在没有 gnu Parallel 的情况下同时拉取我的 git 存储库吗?

我可以在没有 gnu Parallel 的情况下同时拉取我的 git 存储库吗?

在我的家用计算机上,我使用该脚本gitpull.sh同时将所有更改拉取到给定目录下的 git 存储库。

#!/usr/bin/bash

find $1 -name ".git" | sed -r 's|/[^/]+$||' | parallel git -C {} pull origin master

我的问题是parallel我的工作计算机上没有安装该软件。是否可以在不使用 的情况下更改我的脚本parallel

答案1

您可以使用带有 -P 标志的 xargs 来代替并行。就像是:

find $1 -name ".git" | sed -r 's|/[^/]+$||' | xargs -I {} -n 1 -P 0 git -C {} pull origin master

答案2

你可以使用这个工具Git+同时将所有更改拉取给定目录下的 git 存储库。使用这个命令

$ git multi pull

您可以轻松安装并使用它。

答案3

您可以仅使用 bash、readlink 和 find 来完成此操作:

#!/bin/bash

while IFS= read -d '' -r g ; do 
  dir="$(readlink -f "$g/..")"
  git pull -C "$dir" origin master &
done < <(find "$@" -name '.git' -print0)

仔细使用 find-maxdepth选项可以让它运行得更快一些。例如,如果您知道.git将找到所有目录仅有的在当前目录的顶级子目录中,-maxdepth 3将阻止它递归到任何较低的子目录。

我使用的"$@"是命令find而不是$1您使用的未加引号的命令,因此不仅目录参数是可选的,您还可以使用多个目录参数和/或将您可能需要的任何查找选项添加到命令行。

如果您的工作计算机上的版本find不这样做-print0,您可以使用\n作为输入分隔符,但如果任何目录名称包含换行符(这种情况不常见但完全有效),脚本将中断。

while IFS= read -r g ; do 
  dir="$(readlink -f "$g/..")"
  git pull -C "$dir" origin master &
done < <(find "$@" -name '.git')

相关内容