答案1
for rep in */; do
printf '%s:\t' "$rep"
( cd "$rep" && git status --short --branch --untracked-files=no )
done
或者,使用简短的选项,
for rep in */; do
printf '%s:\t' "$rep"
( cd "$rep" && git status -sbuno )
done
这将更改为当前目录中的每个目录并运行给定的git status
命令。输出可能类似于
gnomad_browser/: ## master...origin/master
swefreq-browser/: ## gnomad-remerge...origin/gnomad-remerge
swefreq-config/: ## develop...origin/develop
swefreq/: ## feature/schema-update...origin/feature/schema-update
M sql/swefreq.sql
(我在存储库中有一个未提交的文件swefreq
)
此处选择的选项git status
将仅显示当前分支和任何修改的文件,但您可以轻松修改它以通过删除-uno
或来显示未跟踪的文件--untracked-files=no
。
看git status --help
。
您使用提示向您显示有关每个目录的信息的想法可能会起作用,具体取决于提示的设置方式。我的提示是一个必须计算的单引号字符串:
for rep in */; do
( cd "$rep" && eval echo "$PS1" )
done
我不认为这是一个非常好的解决方案,而且它的功能和告诉您每个存储库的信息也不是很灵活。
答案2
看看 oh-my-git,它似乎需要你在 shell 脚本中做这样的事情:
#!/bin/bash
source ~/.oh-my-git/prompt.sh
for d in dir1 dir2...
do cd "$d"
pwd
bash_prompt # recalculate PS1 value
echo -en "$PS1"
done