몇몇 Git 저장소를 fork하여 참조할 때 또는 여러 컴퓨터에서 git을 이용해 작업을 진행할 때 이미 알고 있는 저장내역을 한번에 pull 하는 방법에 대해 알아보겠습니다.

mac에서 사용 방법

아래와 같이 명령어를 입력하면 이용할 수 있습니다.

1
find . -type d -name .git -print 2>/dev/null -exec git --git-dir={} --work-tree=$PWD/{}/.. pull \;

만약 특정 함수를 지정하여 명령어로 이용하고 싶다면 ./zshrc 기준으로 아래와 같이 함수를 추가합니다.

1
2
3
4
5
6
7
vim ~/.zshrc # 편집

function pull {
  find . -type d -name .git -print 2>/dev/null -exec git --git-dir={} --work-tree=$PWD/{}/.. pull \;
}

source ~/.zshrc # 적용

실행하고 싶은 상단에서 해당 명령어를 입력하면 됩니다.

window에서 사용 방법

아래의 압축파일을 다운로드하여 .bat 파일을 여러 git을 호출하고 싶은 위치의 상단에서 실행하면 됩니다.

powershell 파일도 마찬가지로 상단에서 해당 파일을 powershell에서 실행할 수 있습니다.

압축파일

실행하면 아래와 같이 순차적으로 git pull을 할 수 있습니다..!

.bat 스크립트 코드(feat. gpt)는 아래와 같습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
@echo off
setlocal enabledelayedexpansion

:: 현재 디렉터리와 하위 디렉터리에서 .git 디렉터리를 찾습니다.
for /f "delims=" %%i in ('dir /s /b /ad .git 2^>nul') do (
    set "repoPath=%%i"
    set "workTreePath=%%~dpi"
    set "workTreePath=!workTreePath:~0,-1!"
    echo Updating repository at !workTreePath!
    pushd !workTreePath!
    git pull
    popd
)

endlocal
pause

.ps1 스크립트 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
# 현재 디렉터리 및 하위 디렉터리에서 모든 .git 디렉터리를 찾음
$gitDirs = Get-ChildItem -Recurse -Directory -Force -Filter ".git"

foreach ($gitDir in $gitDirs) {
    $repoPath = $gitDir.FullName
    $workTreePath = Split-Path $repoPath -Parent
    Write-Output "Updating repository at $workTreePath"
    git --git-dir=$repoPath --work-tree=$workTreePath pull
}

참고