带submodule的git仓库自动化一键git push、git pull脚本

前言

很久没写博客了,今天难得闲下来写一次。

不知道大家在使用git的时候有没有遇到过这样的问题:发现git submodule特别好用,适合用于满足同时开发和部署的需求,并且结构清晰,方便我们对整个代码层次有一个大概的了解。但是很烦人的一点就是每次做完开发都要一个一个进入仓库提交更改,很浪费时间,也浪费力气。

(尤其是我这种子模块里带子模块的重度用户)

(这只是顶层模块,一共大概有10多个仓库)

于是哥们奋发图强,为了一劳永逸,终于是憋了两坨大的出来,大家只要把下面的两个脚本放在顶层的仓库目录下就可以开开心心地使用了


首先是自动pull脚本(如果有merge冲突还是不要用为好,纯部署用用就行了)

#!/bin/bash# 配置凭据帮助器,使用可自动提供凭据的方式(例如使用 cache,store,或者其他支持的方式)
git config --global credential.helper store# 获取当前目录下的所有子模块路径
submodules=$(git submodule foreach --recursive --quiet 'echo "$PWD/$path"')# 移除路径中的最后一个文件夹
submodules=$(echo "$submodules" | xargs -I{} dirname {} | sort | uniq)# 去掉根目录
root_dir=$(git rev-parse --show-toplevel)
submodules=$(echo "$submodules" | sed "s|$root_dir/||")# 循环遍历子模块并执行 git pull
for submodule in $submodules; doecho "Updating submodule: $submodule"(cd "$submodule"# 执行 git pull,注意:这里假设你的凭据已经被缓存git pull)
donegit pullecho "All submodules updated!"

然后是自动push脚本:(这个没问题,只要你submodule配置好了随便用)

#!/bin/bash# 配置凭据帮助器,以缓存凭据(输入一次密码后,之后的推送不再需要密码)
git config --global credential.helper store# 获取当前目录下的所有子模块路径,并移除主仓库名字
submodules=$(git submodule foreach --recursive --quiet 'echo "$PWD/$path"')# 移除路径中的最后一个文件夹
submodules=$(echo "$submodules" | xargs -I{} dirname {} | sort | uniq)# 去掉根目录
root_dir=$(git rev-parse --show-toplevel)
submodules=$(echo "$submodules" | sed "s|$root_dir/||")# 循环遍历子模块并检查是否有待提交的更改
for submodule in $(echo "$submodules" | tac); do(# 进入目录cd "$root_dir/$submodule" || exit# 检查是否有未提交的更改if [[ -n $(git status --porcelain) ]]; then# 接受用户输入的 commit messageread -p "Enter commit message for $submodule: " commit_message# 执行 git add 和 git commitgit add .git commit -m "$commit_message"# 执行 git pushgit pushelseecho "No changes in $submodule"fi)
done# 如果有顶层仓库的更改需要提交,则进行提交和推送
if [[ -n $(git status --porcelain) ]]; thenecho "Pushing changes in top submodule"# 接受用户输入的 commit messageread -p "Enter commit message for top submodule: " commit_messagegit add .git commit -m "$commit_message"git push
elseecho "No changes in top submodule"
fiecho "All submodules pushed"

注意:记得在使用前赋予脚本可执行权限哦

sudo chmod +x auto_pull.sh || sudo chmod +x auto_push.sh

然后就可以开开心心高效打工了:(下附使用截图)

(仓库名称抹掉是战队开发资料保密要求,大家谅解一下)

欢迎大佬提出指正意见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215818.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 保活的一种有效的方法

android 保活的一种有效的方法 为什么要保活 说起程序的保活,其实很多人都觉得,要在手机上进行保活,确实是想做一些小动作,其实有些正常的场景也是需要我们进行保活的,这样可以增强我们的用户体验。保活就是使得程序常驻内存,这种程序不容易被杀,或者在被杀以后还能完…

html table样式的设计 表格边框修饰

<!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>今日小说排行榜</title> <style> table {border-collapse: collapse;border: 4px double red; /*…

一文彻底看懂Python切片,Python切片理解与操作

1.什么是切片 切片是Python中一种用于操作序列类型(如列表、字符串和元组)的方法。它通过指定起始索引和结束索引来截取出序列的一部分,形成一个新的序列。切片是访问特定范围内的元素,就是一个Area。 说个笑话:切片不是切片,而是切片,但是又是切片。大家理解下呢(末…

Android相机性能提高50%

文章目录 应用举例&#xff08;可以不看这一part&#xff0c;直接跳过看具体怎么做&#xff09;&#xff1a;Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**Camera2 扩展 API 可以访问高级功能更多设备上的更多机会 正文&#xff1a;开始使用扩展架…

vatee万腾的科技征途:Vatee独特探索的数字化力量

在数字化时代的浪潮中&#xff0c;Vatee万腾以其独特的科技征途成为引领者。公司在数字化领域的探索之路不仅是技术的创新&#xff0c;更是一种对未知的勇敢涉足&#xff0c;是对新时代的深刻洞察和积极实践。 Vatee万腾通过独特的探索&#xff0c;展示了在数字化征途上的创新力…

LemMinX-Maven:帮助在eclipse中更方便地编辑maven的pom文件

LemMinX-Maven&#xff1a;https://github.com/eclipse/lemminx-maven LemMinX-Maven可以帮助我们在eclipse中更方便地编辑maven工程的pom.xml文件&#xff0c;例如补全、提示等。不用单独安装&#xff0c;因为在安装maven eclipse插件的时候已经自动安装了&#xff1a; 例…

nginx的n种用法(nginx安装+正向代理+反向代理+透明代理+负载均衡+静态服务器)

nginx的安装 一、安装依赖 # 一键安装四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel二、安装nginx yum install nginx三、检查是否安装成功 nginx -v四、启动/停止nginx /etc/init.d/nginx start /etc/init.d/nginx stop五、编辑配置文件…

vue2项目从0搭建(三):配置环境变量及对应的webpack配置

前言 实际业务开发中,一个项目很可能会同时配置好几套环境。 比如:常规开发环境,开发测试环境,正式的测试环境,预发测试环境,客户甲的生产环境,客户乙的生产环境,通用生产环境,独立应用环境,微前端环境,大屏专用环境,移动端环境。 一女多嫁的实际业务场景,就需要我们进行多样…

MySQL 有多个普通索引时会取哪一个索引?

我们都知道MySQL在查询时底层会进行索引的优化&#xff0c;假设有两个普通索引&#xff0c;且where 后面也根据这两个普通索引查询数据&#xff0c;那么执行查询语句时会使用到那个索引&#xff1f; 为了方便演示&#xff0c;新建users表&#xff0c;新建idx_name、idx_city这两…

Elasticsearch集群部署

组件介绍 1、Elasticsearch&#xff1a; 是基于一个Lucene的搜索引擎&#xff0c;提供搜索&#xff0c;分析。存储数据三大功能&#xff0c;他提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口&#xff0c;Elasticsearch是用Java开发的&#xff0c;…

Ps:画笔工具的基本操作

画笔工具 Brush Tool是 Ps 中最常用的工具&#xff0c;广泛地用于绘画与修饰工作。 虽然多数操作可在画笔工具的工具选项栏中选择执行&#xff0c;但是如果能记住相应的快捷键可大大提高工作效率。 熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Ps 中许多…

Oracle研学-介绍及安装

一 ORACLE数据库特点: 支持多用户&#xff0c;大事务量的事务处理数据安全性和完整性控制支持分布式数据处理可移植性(跨平台&#xff0c;linux转Windows) 二 ORACLE体系结构 数据库&#xff1a;oracle是一个全局数据库&#xff0c;一个数据库可以有多个实例&#xff0c;每个…