简介
为了检查git repositores的状态,可以从存储库的根目录发出git status
。
C:\path\to\git_repositories\git_repo_1>git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
如果目录由多个目录组成,例如50个git存储库
C:\path\to\git_repositories>dir
Directory of C:\path\to\git_repositories
.ssh
git_repo_1
...
git_repo_50
0 File(s)
51 Dir(s)
也不
C:\path\to\git_repositories>git status .
fatal: Not a git repository (or any of the parent directories): .git
既不
C:\path\to\git_repositories>git status ./.
fatal: Not a git repository (or any of the parent directories): .git
能够检查所有存储库的状态
问题
如何一次检查所有git存储库的状态?
答案 0 :(得分:7)
您可以使用更改为每个目录的for
循环,执行git status
然后更改备份:
for /f "tokens=*" %a in ('dir /ad /b') do cd %a & git status & cd ..
如果在批处理文件中使用它,则需要将百分比加倍:
for /f "tokens=*" %%a in ('dir /ad /b') do cd %%a & git status & cd ..
修改强>
根据Cupcake的建议,你可以这样做:
for /f "tokens=*" %a in ('dir /ad /b') do git --git-dir=%a/.git --work-tree=%a status
这感觉就像一个更强大,更灵活的解决方案(例如,您可以更轻松地调整它以使用存储在文本文件中的路径列表)。
答案 1 :(得分:2)
我去了:
find . -name .git -execdir bash -c 'echo -en "\033[1;31m"repo: "\033[1;34m"; basename "`git rev-parse --show-toplevel`"; git status -s' \;
我认为它更好,因为递归处理目录。
编辑以更清洁的方式显示回购的名称。
答案 2 :(得分:2)
如果你是一个工具家伙,你可以使用我最近写的一个名为RepoZ的小帮手(并且仍在写)。
我回答了quite similar question in more detail here。
这是当前开发阶段的屏幕截图,希望您能看到它对您是否有帮助:
如果您想知道+45 ~403 -88
之类的字符串是什么意思 - 它们是精简状态字符串,告诉您是否有提取或推送提交以及是否在本地添加/修改/删除了文件。关于project site on GitHub
答案 3 :(得分:0)
如果您的系统由众多Git存储库组成,那么可能是创建了Google repo
工具的情况:https://code.google.com/archive/p/git-repo/
如果您发现自己编写脚本以在这些存储库上分发Git命令,则应该切换到repo
。
repo
使用名为“manifest.xml”的(不幸的)XML文件,该文件指定工作区中的Git存储库。对于每个repo,指定应该出现哪个分支和提交;您可以使用repo
将Git存储库“固定”到特定版本或跟踪磁头。
如果您有repo
工作区,那么
$ repo status
然后repo
将完成你所要求的:迭代Git回购并给你一个状态。
答案 4 :(得分:0)
在 bash 中,我发现了这个非常好的命令(由 https://coderwall.com/wkjagt 提供):
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '(echo {} && cd {} && git status -s && echo)' \;
要在您的 bash_profile 中创建别名,请使用以下内容进行转义以使其工作:
alias gs_recursive='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c "echo {}; cd {}; git status -s; echo" \;'