web-dev-qa-db-ja.com

Windows forループスルーdirs、git pullを実行しますか?

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
A T

これは、CMDのバッチファイルで機能します。

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

(私がこのサイトで得たすべての素晴らしいヒントをありがとう!)

5
user708180

これはPowershellの単純なワンライナーではないでしょうか?

例:

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

ベースフォルダおよびEnterキーを押すエクスプローラアドレスフィールドpowershellを入力します。次に、以下を実行します。

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

Resolve-Pathが機能しない場合は、このアプローチを使用してください。

1
Jörg

代わりにgit pull <repository>デフォルトのシェル設定でGitShellでcmd.exe構文を使用し、set内の変数の初期化(for)についてsetlocal enabledelayedexpansionを検索することをお勧めしますループ。

0
user373230