С Bash все просто:
for d in *; do GIT_DIR="$d/.git" git pull; done
Или:
for d in *; do GIT_DIR="$PWD/$d/.git" git pull; done
Однако из командной строки Windows это не так просто. Я пробовал:
for /D %i in (*.*) do cd "%i" && git pull
for /D %i in (*.*) do cd "<absolute_path>\%i" && git pull
for /D %i in (*.*) do set GIT_DIR="<absolute_path>\%i\.git git pull"
for /D %i in (*.*) do set GIT_DIR="<absolute_path>\%i\.git && git pull"
Но ничего не работает. Постоянно получаю одну из этих ошибок:
fatal: unable to access '"repo-name/.git" /config': Invalid argument
The system cannot find the path specified.
решение1
У меня это работает в пакетном файле в CMD:
for /d %%i in (*.*) do cd %%i & git pull & cd..
решение2
Разве это не может быть простым однострочным кодом на Powershell?
Пример:
Resolve-Path D:\work\repos\*\.git | foreach { cd $_; git pull }
решение3
Вступить powershell
вПоле адреса проводникавашейбазовая папкаинажмите Enter. Затем выполните:
Get-ChildItem . -exclude *.ps1,temp,*.txt | foreach { cd $_; Write-Host "`r`n" $_; Git pull '-v' }
Используйте этот подход, если Resolve-Path
он вам не подходит.
решение4
Я предлагаю вместо этого использовать git pull <repository>
синтаксис Git Shell с cmd.exe
настройками оболочки по умолчанию и искать setlocal enabledelayedexpansion
инициализацию переменных ( set
) внутри for
цикла.