一次检查所有git存储库的状态

时间:2014-06-22 15:23:27

标签: windows git status

简介

为了检查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存储库的状态?

5 个答案:

答案 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

这是当前开发阶段的屏幕截图,希望您能看到它对您是否有帮助:

RepoZ

如果您想知道+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" \;'