我在一个目录下有多个git repos,我想知道git中是否有一些功能可以迭代每个目录,检查是否有任何未提交的更改并报告给我?我可以每天早上运行这个程序,以确保所有内容都是最新的。只是在任何一天,我都会处理多个repos,我会忘记提交我的更改,这可能会导致冲突,当我意识到很久以后才提交它们。克里斯
wsewodh21#
Andy是正确的(在评论中):如果父目录本身是父存储库的根目录,所有的子目录都是子模块,那么git status可以检测其中一个的任何变化。您还可以使用(带子模块)git diff
git diff
git submodule foreach --recursive git diff --name-status
如果没有子模块,请参见“git: Find all uncommited locals repos in a directory tree“中的脚本解决方案。
wdebmtf22#
为此,我编写了一个命令行工具gita,它可以显示所有repos的状态,包括编辑状态、与远程分支的关系等,它还可以批量执行来自任何工作目录的命令。您还可以对存储库进行分组。对于您的项目结构,您可以运行
gita add -r <root>
它会自动将下级回购协议添加到组中。然后gita ll root会显示相关信息,gita <command> root会在根组的repos上批量运行命令,当然你也可以在任何工作目录下对指定的repos运行命令。还有其他功能,如设置上下文,定义自定义命令等。安装是pip3 install -U gita。您可以在github上找到更多信息。
gita ll root
gita <command> root
pip3 install -U gita
gita ll命令在分支名称旁边显示3个可能的符号,这表示
gita ll
+
*
_
分支名称以5种方式着色| 颜色|意义|| - ------|- ------|| 白色|本地没有远程|| 绿色|本地与远程相同|| 红色|本地已从远程分支|| 紫色|本地优先于远程(适用于推送)|| 黄色|本地在远程之后(适合合并)|
pvabu6sv3#
也许https://metacpan.org/module/rgit可能会有帮助:)
mbskvtky4#
把这个别名添加到.gitconfig文件中,然后你就可以从父目录运行git status-all来递归地获取所有git仓库的状态。
.gitconfig
git status-all
[alias] status-all = "!for d in `find . -name \".git\"`; do echo \"\n*** Repository: $d ***\" && git --git-dir=$d --work-tree=$d/.. status; done"
5gfr0r5j5#
我不认为git内置了这个功能,因此不久前我创建了一个脚本来实现这个功能:https://github.com/mnagel/clustergitclustergit允许你一次在多个仓库上运行git命令,尤其是在一个文件夹上递归运行git status。clustergit支持git status,git pull,git push等等。
clustergit
git status
git pull
git push
j2datikz6#
如果有人需要一个班轮:
rootdir=$(pwd);for folder in $(ls -p | grep /);do cd "$rootdir/$folder";git status; cd $rootdir; done
6条答案
按热度按时间wsewodh21#
Andy是正确的(在评论中):如果父目录本身是父存储库的根目录,所有的子目录都是子模块,那么git status可以检测其中一个的任何变化。
您还可以使用(带子模块)
git diff
如果没有子模块,请参见“git: Find all uncommited locals repos in a directory tree“中的脚本解决方案。
wdebmtf22#
为此,我编写了一个命令行工具gita,它可以显示所有repos的状态,包括编辑状态、与远程分支的关系等,它还可以批量执行来自任何工作目录的命令。
您还可以对存储库进行分组。对于您的项目结构,您可以运行
它会自动将下级回购协议添加到组中。
然后
gita ll root
会显示相关信息,gita <command> root
会在根组的repos上批量运行命令,当然你也可以在任何工作目录下对指定的repos运行命令。还有其他功能,如设置上下文,定义自定义命令等。安装是
pip3 install -U gita
。您可以在github上找到更多信息。gita ll
命令在分支名称旁边显示3个可能的符号,这表示+
:阶段性更改*
:未暂存的更改_
:未跟踪的文件/文件夹分支名称以5种方式着色
| 颜色|意义|
| - ------|- ------|
| 白色|本地没有远程|
| 绿色|本地与远程相同|
| 红色|本地已从远程分支|
| 紫色|本地优先于远程(适用于推送)|
| 黄色|本地在远程之后(适合合并)|
pvabu6sv3#
也许https://metacpan.org/module/rgit可能会有帮助:)
mbskvtky4#
把这个别名添加到
.gitconfig
文件中,然后你就可以从父目录运行git status-all
来递归地获取所有git仓库的状态。5gfr0r5j5#
我不认为git内置了这个功能,因此不久前我创建了一个脚本来实现这个功能:https://github.com/mnagel/clustergit
clustergit
允许你一次在多个仓库上运行git命令,尤其是在一个文件夹上递归运行git status。clustergit
支持git status
,git pull
,git push
等等。j2datikz6#
如果有人需要一个班轮: