git中是否有任何功能可以检查一个目录下的多个git repos?

doinxwow  于 2022-12-17  发布在  Git
关注(0)|答案(6)|浏览(139)

我在一个目录下有多个git repos,我想知道git中是否有一些功能可以迭代每个目录,检查是否有任何未提交的更改并报告给我?
我可以每天早上运行这个程序,以确保所有内容都是最新的。
只是在任何一天,我都会处理多个repos,我会忘记提交我的更改,这可能会导致冲突,当我意识到很久以后才提交它们。
克里斯

wsewodh2

wsewodh21#

Andy是正确的(在评论中):如果父目录本身是父存储库的根目录,所有的子目录都是子模块,那么git status可以检测其中一个的任何变化。
您还可以使用(带子模块)git diff

git submodule foreach --recursive git diff --name-status

如果没有子模块,请参见“git: Find all uncommited locals repos in a directory tree“中的脚本解决方案。

wdebmtf2

wdebmtf22#

为此,我编写了一个命令行工具gita,它可以显示所有repos的状态,包括编辑状态、与远程分支的关系等,它还可以批量执行来自任何工作目录的命令。
您还可以对存储库进行分组。对于您的项目结构,您可以运行

gita add -r <root>

它会自动将下级回购协议添加到组中。
然后gita ll root会显示相关信息,gita <command> root会在根组的repos上批量运行命令,当然你也可以在任何工作目录下对指定的repos运行命令。
还有其他功能,如设置上下文,定义自定义命令等。安装是pip3 install -U gita。您可以在github上找到更多信息。

gita ll命令在分支名称旁边显示3个可能的符号,这表示

  • +:阶段性更改
  • *:未暂存的更改
  • _:未跟踪的文件/文件夹

分支名称以5种方式着色
| 颜色|意义|
| - ------|- ------|
| 白色|本地没有远程|
| 绿色|本地与远程相同|
| 红色|本地已从远程分支|
| 紫色|本地优先于远程(适用于推送)|
| 黄色|本地在远程之后(适合合并)|

mbskvtky

mbskvtky4#

把这个别名添加到.gitconfig文件中,然后你就可以从父目录运行git status-all来递归地获取所有git仓库的状态。

[alias]
status-all = "!for d in `find . -name \".git\"`; do echo \"\n*** Repository: $d ***\" && git --git-dir=$d --work-tree=$d/.. status; done"
5gfr0r5j

5gfr0r5j5#

我不认为git内置了这个功能,因此不久前我创建了一个脚本来实现这个功能:https://github.com/mnagel/clustergit
clustergit允许你一次在多个仓库上运行git命令,尤其是在一个文件夹上递归运行git status。clustergit支持git statusgit pullgit push等等。

j2datikz

j2datikz6#

如果有人需要一个班轮:

rootdir=$(pwd);for folder in $(ls -p | grep /);do cd "$rootdir/$folder";git status; cd $rootdir; done

相关问题