上下文我制作了一个简单的函数,在每个子目录中执行一个git pull :
function gprall() { for d in */; do [ -d "$d/.git" ] && (cd $d; echo -n "$(pwd) : "; git pull ; cd ..); done }
它工作得很好,脚本的输出是这样的:
/Users/bric3/oss/mockito : Rebasing (1/1) Successfully rebased and updated refs/heads/master. /Users/bric3/oss/grpc-demos : Rebasing (1/1) Successfully rebased and updated refs/heads/master. ...
然后在git 2.12或2.13的发布周围输出变成:
Successfully rebased and updated refs/heads/master./1) Successfully rebased and updated refs/heads/master. (1/1) Successfully rebased and updated refs/heads/master. Successfully rebased and updated refs/heads/master.g (1/1) Successfully rebased and updated refs/heads/master.ng (1/1) ...
我不知道发生了什么,但怀疑有些进度条像打印回车。
我尝试了下面的选项--quiet或--progress来看看我能不能做些什么,但是它不会改变行为,也就是说,git的输出正在消除我行的开始。
我试图用echo来包装git命令
for d in */; do [ -d "$d/.git" ] && (cd $d; echo -n "$(pwd) : "; echo $(git pull) ; cd ..); done
这确实更好
/Users/bric3/oss/mockito : Successfully rebased and updated refs/heads/master. Rebasing (1/1) /Users/bric3/oss/grpc-demos : Successfully rebased and updated refs/heads/master. Applied autostash. Rebasing (1/1) ...
有消息Successfully...被打印之前,探索networking和git之后,我发现这行被打印在stderr ,这就解释了为什么它打印之前Rebasing 。
我知道我可以通过在第一个回声中删除-n来find一个简单的解决方法。 但是我想知道如果我想用我想要的东西(这里是回购path)在第一行加前缀,我的select是什么:
/Users/bric3/oss/mockito : Successfully rebased and updated refs/heads/master. /Users/bric3/oss/grpc-demos : Successfully rebased and updated refs/heads/master. Applied autostash. ...
所以如果可能的话前面加上一行,如果git还有其他的东西要说,可以加上一行。
所以这个想法大声地说 ,应该是程序应该为每个git回购(我想在terminal上看到)做:
回声的path
/path/to/repo :
运行git
在标准输出Rebasing
/path/to/repo : Rebasing
git输出回车
/path/to/repo :
git在stderr上输出进度信息:
/path/to/repo : Successfully rebased...
如果有其他信息可用,git会添加新行
/path/to/repo : Successfully rebased... Applied autostash.
简单和优雅的方式可能吗?