Windows for循环通过dirs,运行git pull?


4

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

你确定这不起作用c:\sdf>for /D %i in (*.*) do (CD c:\sdf\%i && DIR && pause) 使用暂停进行故障排除。另一种变化是c:\sdf>for /D %i in (*.*) do (CD %i && DIR && CD .. && PAUSE)c:\sdf>for /D %i in (*.*) do (PUSHD %i && DIR && POPD && PAUSE)
barlop 2015年

如果你看到FOR正在做你想做的事情,并让它做你想做的事,那么你可以看看GIT命令
barlop 2015年

Answers:


5

这适用于我在CMD的批处理文件中:

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

(感谢您在本网站上获得的所有精彩提示!)


谢谢,这很有效。更换%%%(不是在脚本中)在CMD纯粹运行时。
2017年

这很有效,谢谢
RuSs

4

在Powershell中这不是一个简单的单线程吗?

例:

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

我更喜欢使用Windows Batch; 有没有办法让前面提到的for循环工作?
AT

Powershell是Windows上事实上的shell。Cmd将来会被弃用。尝试在cmd中拼凑一些东西是没有用的,因为面向对象的Windows shell就在你的指尖,这使得一切都变得如此简单。
-my

1
真?- 好吧,只需将代码更改为D:\work\repos\*,我就会接受。
2015年

我发布的Resolve-Path命令自动获取repos中的所有文件夹,然后在每个文件夹中查找名为.git的文件夹。这就是你想根据你的代码进入的地方。这是一个非常优雅的解决方案。如果您删除管道及其后的所有内容,您将看到它为您提供了所有.git文件夹。
梅加莫夫

1

输入powershell浏览器地址栏你的基础文件夹,并按下回车键。然后执行:

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

如果Resolve-Path不适合您,请使用此方法。


0

我建议git pull <repository>在Git Shell上使用语法,使用cmd.exe默认shell设置,并在循环内查找setlocal enabledelayedexpansion变量initialization(setfor

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.