Windows dirs ile döngü için, git git çalıştır?


4

Bash'den basittir:

for d in *; do GIT_DIR="$d/.git" git pull; done

Veya:

for d in *; do GIT_DIR="$PWD/$d/.git" git pull; done

Ancak, Windows Komut İstemi'nden bu kadar basit değil. Denedim:

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"

Ama hiçbiri çalışmıyor. Daima bu hatalardan birini elde etmek:

fatal: unable to access '"repo-name/.git" /config': Invalid argument
The system cannot find the path specified.

Bunun işe yaramadığından emin misiniz? c:\sdf>for /D %i in (*.*) do (CD c:\sdf\%i && DIR && pause) Sorun gidermek için duraklamayı kullanın. Başka bir varyasyon olduğunu c:\sdf>for /D %i in (*.*) do (CD %i && DIR && CD .. && PAUSE) vec:\sdf>for /D %i in (*.*) do (PUSHD %i && DIR && POPD && PAUSE)
barlop

Yanıtlar:


5

Bu benim için CMD'deki bir toplu iş dosyasında çalışıyor:

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

(Bu sitede aldığım tüm harika ipuçları için teşekkürler!)


Teşekkürler, işe yaradı. Değiştir %%ile %(bir komut dosyası) CMD üzerinde tamamen çalıştırırken.
AT

Bu harika çalışıyor, teşekkürler
RuSs

4

Bu Powershell'deki basit bir tek astar olamaz mı?

Örnek:

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

Windows Toplu İşini kullanmayı tercih ediyorum; Söz konusu fordöngü işini yapmanın bir yolu yok mu?
AT

Powershell, Windows'taki fiili kabuktur. Cmd gelecekte kullanımdan kaldırılacak. Her şeyi çok kolaylaştıran parmak uçlarınızda bir nesne yönelimli Windows kabuğu olduğunda cmd'de bir şeyi bir araya getirmeye çalışmanın faydası yoktur. benim iki kuruş :-)
megamorf

1
Gerçekten mi? - Pekala, sadece kodunu değiştir, D:\work\repos\*kabul edeyim.
AT

Gönderdiğim şekliyle Resolve-Path komutu otomatik olarak depolardaki tüm klasörleri alır ve daha sonra her birinde .git adında bir klasör arar. Koduna göre girmek istediğin yer orası. Oldukça şık bir çözüm. Boruyu ve arkasındaki her şeyi çıkarırsanız, tüm .git klasörlerinin size verildiğini görürsünüz.
megamorf

1

Enter powershelliçine Explorer adres alanına senin bir taban klasörüne ve butonu tıklayın . Ardından yürütün:

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

Resolve-PathSizin için işe yaramazsa , bu yaklaşımı kullanın .


0

git pull <repository>Git Shell yerine sözdizimi cmd.exevarsayılan kabuk ayarıyla kullanmanızı ve setlocal enabledelayedexpansiondeğişken ilklendirmeyi ( set) fordöngü içinde aramanızı öneririm .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.