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)

찾기 -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')

관련 정보