git中有没有功能可以检查一个目录下的多个git仓库?

问题描述 投票:0回答:7

我在一个目录下有多个 git 存储库,我想知道 git 中是否有一些功能可以迭代每个目录,检查是否有任何未提交的更改并向我报告?

我可以每天早上运行它以确保一切都是最新的。

只是有一天,我会使用多个存储库,并且会忘记提交更改,当我后来意识到要提交更改时,这可能会导致冲突。

克里斯

git version-control github
7个回答
1
投票

Andy是对的(在评论中):如果父目录本身就是父存储库的根目录,所有子目录都是子目录,那么 git status 可以检测其中之一的任何更改。

您还可以使用(与子模块)

git diff

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

如果没有子模块,请参阅“git:在目录树中查找所有未提交的本地存储库”中的脚本解决方案。


1
投票

我为此编写了一个命令行工具gita。它可以显示所有存储库的状态,包括编辑状态、与远程分支的关系等。它还可以从任何工作目录批量执行命令。

您还可以对存储库进行分组。对于您的项目结构,您可以运行

gita add -r <root>

这会自动将下级存储库添加到一个组中。

然后

gita ll root
会显示相关信息。
gita <command> root
将在根组中的存储库上批量运行该命令。您当然也可以从任何工作目录在指定的存储库上运行命令。

还有其他功能,例如设置上下文、定义自定义命令等。安装是

pip3 install -U gita
。您可以在github上找到更多信息。

enter image description here

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

  • +
    :阶段性变化
  • *
    :未分阶段的更改
  • _
    :未跟踪的文件/文件夹

分支名称有 5 种颜色

颜色 意义
白色 本地没有远程
绿色 本地与远程相同
红色 本地与远程不同
紫色 本地领先于远程(有利于推送)
黄色 本地位于远程后面(有利于合并)

0
投票

也许https://metacpan.org/module/rgit可能有帮助:)


0
投票

将此别名添加到您的

.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"

0
投票

我不认为 git 有这个内置功能,因此前段时间我创建了一个脚本来执行此操作:https://github.com/mnagel/clustergit

clustergit
允许您同时在多个存储库上运行 git 命令。在一个文件夹上递归运行 git status 尤其有用。
clustergit
支持
git status
git pull
git push
等。


0
投票

如果有人需要单衬:

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

0
投票

当我使用多个可编辑的研究存储库运行一些机器学习实验时,我也有同样的担忧。我发现有时由于存储库的更新,重现旧实验非常困难且耗时。

所以我写了一个小工具 Git_Repos_Tracker 来跟踪版本并强制所有跟踪的存储库在我运行实验时保持干净,请参阅 example 。它可以检测运行实验时是否使用调试器。在这种情况下,它将容忍脏存储库(未暂存和未提交的更改)。

所以每次当我完成实验时,我都会将所有存储库的提交号存储在我的日志文件中see example。我可以轻松地与我的同事和学生分享这些数字,让他们轻松地重现我的实验。

© www.soinside.com 2019 - 2024. All rights reserved.