在Mac上的多个存储库中的Git状态

eap*_*pen 18 git macos bash shell

我一直在寻找解决方案一段时间,并没有找到我需要的东西.

我在我的Mac(OSX 10.6)上的一个文件夹中有几个Git存储库,并且想要一个循环遍历所有存储库的脚本或工具,如果有任何需要,请告诉我commit.

这是我的结构

Sites
  /project1
  /project2
  /project3
Run Code Online (Sandbox Code Playgroud)

我希望该工具git status在Sites/project1,Sites/project2,Sites/project3中执行,并告诉我们是否有任何更改或需要暂存或提交的新文件.

我发现最接近可能是hackable的脚本就在这里,但即使是那个脚本也不会运行,我收到一个错误:

"意外令牌附近的语法错误`do"

这可能是为*nix编写的.

小智 24

似乎这个问题已经得到了很好的回答,但我想在完成同样的工作之后再投入两美分.

我使用一个简单的bash脚本更接近jcordasc的答案.我做了一件有点不同的事情.查看git的帮助文档,您可以设置git目录和工作目录.这消除了'cd'到目录的需要.并不是说真的有那么大的差别......

#!/bin/bash

for gitdir in `find ./ -name .git`; 
    do 
        workdir=${gitdir%/*}; 
        echo; 
        echo $workdir; 
        git --git-dir=$gitdir --work-tree=$workdir status; 
    done
Run Code Online (Sandbox Code Playgroud)

显然他对于如何显示状态更先进/更清洁......


Rya*_*cox 12

有一个基于Python的程序,没有提交,听起来它会完全符合你的要求.它还没有git支持(只有hg和Subversion),但你可以帮助作者在他的app中实现git支持,或者把他的想法作为如何实现你的东西(他在项目页面上记录他的发现方法)我链接到).

  • 谢谢瑞恩!我最终创建了一个支持Git的版本并请求了bitbucket并在github上创建了我的存储库 - http://github.com/eapen/uncommitted (7认同)

And*_*rts 5

这是一个较老的问题,但我去了更新jcordasc的答案,所以它适用于git 1.7.7.5,我想我也可以在这里贡献它:

https://gist.github.com/3018100

此版本将任何路径或路径作为参数,并为其在参数表示的文件树中的任何位置找到的任何git存储库提供jcordasc的输出.它还支持检测未刷新和未合并的提交.


Ser*_*lov 5

使用jsut单个shell别名检查多个repo状态.无需安装.所有学分:https://coderwall.com/p/grmruq/git-status-on-all-repos-in-folder

对于bash:

alias gitstat='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c "(echo {} && cd {} && git status -s && echo)" \;'
alias gitstatfull='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c "(echo {} && cd {} && git status && echo)" \;'
Run Code Online (Sandbox Code Playgroud)

或者对于Cshell

alias gitstat           'find . -maxdepth 1 -mindepth 1 -type d -exec sh -c "(echo {} && cd {} && git status -s && echo)" \;'
alias gitstatfull       'find . -maxdepth 1 -mindepth 1 -type d -exec sh -c "(echo {} && cd {} && git status && echo)" \;'
Run Code Online (Sandbox Code Playgroud)