我在文件系统的某个位置有许多(10-15个)本地的git代码库,但它们都在 /data/ 文件夹中。
我想找到所有有未提交更改的文件夹。我该如何做?类似递归全局 git status
的变体。
我认为所有答案都错了。任何 git 命令只能在受 git 控制的文件夹中使用。我需要搜索这样的文件夹。
因此,我编写了这个脚本来实现这一点:
#!/usr/bin/env ruby
require 'find'
require 'fileutils'
#supply directory to search in as argument
@pat = ARGV[0]
(puts "directory argument required"; exit) unless @pat
Dir.chdir(@pat)
Find.find(@pat) do |path|
if FileTest.directory?(path)
Dir.chdir(path)
resp = `git status 2>&1`
unless resp =~ /fatal|nothing to commit \(working directory clean\)/i
puts "#{'#'*10}\n#{Dir.pwd}#{'#'*10}\n#{resp}"
Find.prune
end
Dir.chdir(@pat)
end
end
.git
目录,通过管道传递到while循环中获取一个命名变量,对于每个$dir
使用cd
命令进入该目录并输出其git status
信息,同时显示该目录。 - OneCricketeer-maxdepth 2
,这样会更快。最终优化命令:find . -type d -name '.git' -maxdepth 2 | while read dir ; do sh -c "cd $dir/../ && echo -e \"\nGIT STATUS IN ${dir//\.git/}\" && git status -s" ; done
。 - Massimiliano Arione