3

С 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.

4 ответа4

4

Это работает для меня в командном файле в CMD:

for /d %%i in (*.*) do cd %%i & git pull & cd..

(Спасибо за все замечательные советы, которые я получаю на этом сайте!)

3

Разве это не может быть простой однострочностью в Powershell?

Пример:

Resolve-Path D:\work\repos\*\.git | foreach { cd $_; git pull }
0

Я предлагаю использовать git pull <repository> синтаксис вместо этого на Git Shell с установкой оболочки cmd.exe по умолчанию, и посмотреть setlocal enabledelayedexpansion для инициализации переменной set внутри for цикла.

0

Введите powershell в поле адреса Explorer вашей базовой папки и нажмите Enter. Затем выполните:

Get-ChildItem . -exclude *.ps1,temp,*.txt | foreach { cd $_; Write-Host "`r`n" $_; Git pull '-v' }

Используйте этот подход, если Resolve-Path не будет работать для вас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .