Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多个存储库上运行git gc_Git_Bash - Fatal编程技术网

在多个存储库上运行git gc

在多个存储库上运行git gc,git,bash,Git,Bash,我在/git 路径有不同的深度,例如: /git/project/project1/module1.git /git/project/project1/module2.git /git/project/project2/dev/module1.git /git/library/libgit2.git /git/library/jquery/jquery.git 如何在/git内的所有回购中递归运行git gc 我更喜欢使用shell脚本来迭代存储库:如果该目录不是有效的git存储库,请不要运行

我在
/git

路径有不同的深度,例如:

/git/project/project1/module1.git
/git/project/project1/module2.git
/git/project/project2/dev/module1.git
/git/library/libgit2.git
/git/library/jquery/jquery.git
如何在
/git
内的所有回购中递归运行
git gc


我更喜欢使用shell脚本来迭代存储库:如果该目录不是有效的git存储库,请不要运行
git gc

您可以尝试以下操作:

find /git -name '*.git' -execdir sh -c 'cd {} && git gc' \;
这将在
/git
下找到与
*.git
匹配的所有目录,并将
cd
放入其中,然后运行
git gc
,因为msysgit中的
find
(版本4.1)太旧,所以不支持
-execdir
选项

我们必须写一个for循环

for line in $(find /git -name '*.git'); do (cd $line && git gc); done
在某些系统(如OSX)上,for循环将空格视为分隔符,从而中断包含空格的目录名。设置
IFS
仅使用换行符
\n
以使其正常工作,并在完成后重置为默认值:

oldIFS=$IFS; IFS=$'\n'; for line in $(find /git -name '*.git'); do (echo $line; cd $line; git gc); done; IFS=$oldIFS

谢谢我遇到了以下一些错误:
sh:line 0:cd:./.git:不是目录
,可能是因为.git也可以是一个文件,如果它表示子模块。该命令抱怨其不安全的blah blah
查找-名称“*.git”-execbash-c'cd{}&&gitcc'printf{};”可以工作,但它们都不适用于包含空格的目录。。。。