node.js实现批量修改git项目的数据源

        在项目开发过程中,大型项目会分块,每一块都会拥有一个git地址,当想切换git地址的域名时,如果手动一个一个去修改对我们来说费时费力的事情,如果能有一个脚本,一次性批量修改,可以给大家节省很多时间成本。

一般来讲,git源切换只是修改了域名,项目名称基本不会变化

步骤1:引入对应模块

// 引入对应模块
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');

步骤2:声明新旧域名、搜索目录 常量并赋值

// 旧域名和新域名
const OLD_DOMAIN = 'http://xxx.xxx.xxx.xxx/';
const NEW_DOMAIN = 'http://xxx.xxx.xxx.xxx/';// 要搜索的目录
const SEARCH_DIR = '.'; // 当前目录,可以修改为其他目录

 步骤3:定义一个函数,用于遍历当前目录下的所有项目,当然,你可以根据文件夹名称进行过滤

// 查找 Git 仓库并切换远程 URL
function changeGitRemotesInFolders(dir) {fs.readdirSync(dir).forEach(file => {const fullPath = path.join(dir, file);if(!fullPath.includes('.vscode') && !fullPath.includes('node_modules')){const stats = fs.statSync(fullPath);if (stats.isDirectory()) {if (fs.existsSync(path.join(fullPath, '.git'))) {// 这是一个 Git 仓库changeGitRemote(fullPath);}}}});
}

 步骤4:逐个修改项目git地址(注意:进入一个文件夹执行修改命令后,需要退出当前文件夹,回到上一级目录,不然可能会出现找不到下一个项目的报错提示)

process.chdir(folderPath); // 修改当前工作目录

process.chdir('..'); // 返回上一级目录

// 切换 Git 远程仓库 URL(只替换域名)
function changeGitRemote(folderPath) {try {process.chdir(folderPath);// 获取当前远程仓库的 URLconst remoteUrl = execSync('git config --get remote.origin.url').toString().trim();// 检查是否需要替换域名if (remoteUrl.includes(OLD_DOMAIN)) {const newRemoteUrl = remoteUrl.replace(OLD_DOMAIN, NEW_DOMAIN);// 设置新的远程仓库 URLexecSync(`git remote set-url origin ${newRemoteUrl}`);console.log(`Successfully changed remote URL for ${folderPath} from ${remoteUrl} to ${newRemoteUrl}`);} else {console.log(`No need to change remote URL for ${folderPath} (current URL: ${remoteUrl})`);}// process.chdir(process.cwd()); // 理论上这里不需要,因为 process.chdir 是对当前进程的修改,但为清晰起见还是加上process.chdir('..');} catch (error) {console.error(`Error processing ${folderPath}:`, error);}
}

完整代码 

const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');// 旧域名和新域名
const OLD_DOMAIN = 'http://xxx.xxx.xxx.xxx/';
const NEW_DOMAIN = 'http://xxx.xxx.xxx.xxx/';// 要搜索的目录
const SEARCH_DIR = '.'; // 当前目录,可以修改为其他目录// 查找 Git 仓库并切换远程 URL
function changeGitRemotesInFolders(dir) {fs.readdirSync(dir).forEach(file => {const fullPath = path.join(dir, file);if(!fullPath.includes('.vscode') && !fullPath.includes('node_modules')){const stats = fs.statSync(fullPath);if (stats.isDirectory()) {if (fs.existsSync(path.join(fullPath, '.git'))) {// 这是一个 Git 仓库changeGitRemote(fullPath);}}}});
}// 切换 Git 远程仓库 URL(只替换域名)
function changeGitRemote(folderPath) {try {process.chdir(folderPath);// 获取当前远程仓库的 URLconst remoteUrl = execSync('git config --get remote.origin.url').toString().trim();// 检查是否需要替换域名if (remoteUrl.includes(OLD_DOMAIN)) {const newRemoteUrl = remoteUrl.replace(OLD_DOMAIN, NEW_DOMAIN);// 设置新的远程仓库 URLexecSync(`git remote set-url origin ${newRemoteUrl}`);console.log(`Successfully changed remote URL for ${folderPath} from ${remoteUrl} to ${newRemoteUrl}`);} else {console.log(`No need to change remote URL for ${folderPath} (current URL: ${remoteUrl})`);}// process.chdir(process.cwd()); // 理论上这里不需要,因为 process.chdir 是对当前进程的修改,但为清晰起见还是加上process.chdir('..');} catch (error) {console.error(`Error processing ${folderPath}:`, error);}
}// 主函数
function main() {changeGitRemotesInFolders(SEARCH_DIR);
}main();

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[每周一更]-(第122期):模拟面试|数据库面试思路解析

10|数据库索引:为什么 MySQL 用 B+ 树而不用 B 树? 为什么 MySQL 用 B+ 树而不用 B 树? 什么是覆盖索引? 什么是聚簇索引/非聚簇索引? 什么是哈希索引?MySQL InnoDB 引擎怎么创建一个哈希索引? 什么回表?如何避免回表? 树的高度和查询性能是什么关系? 什么是索引最左…

数据结构之二叉树的收尾(性质)

1)对任何⼀棵二叉树, 如果度为 0 其叶结点个数为 n0 , 度为 2 的分支结点个数为 n2 , 则有n0n2 1 1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( ) 解:n0n2 1 n01…

MyBatis-Plus条件构造器:构建安全、高效的数据库查询

一、关于条件构造器(Wrapper) 1.1 简介 MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开…

HT3286 免电感滤波2x30W D类立体声音频功放

1 特性 ● 输出功率(BTL模式) 2x20W(VDD14.5V,RL4Ω,THDN10%) 2x33W(VDD22V,RL8Ω,THDN10%) ● 输出功率(PBTL模式) 50W(VDD22V,RL4Ω,THDN1%) ● 单电源系统,4.5V-22V宽电压输入范围 ● 超过90%效率,无需散热器 ● 可选输出模式:BD和1SPW ● MUTE和关断…

安当ASP系统:适合中小企业的轻量级Radius认证服务器

安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…

开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)

一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异&a…

第七部分:1. STM32之ADC实验--单通道实验(滑动变阻器调节电压)

主要利用一个模拟量的电位器来实时改变电压值,通过STM32自带的ADC通道来采集这个数据,并打印出来!本实验是单通道实验 一句话,学完STM32,我就往南走,我的工资只有5000.~~~~Whappy 实验代码: A…

50岁+人群月活超1亿,短剧迎来新对手,小程序游戏“收割”中老年

抢夺中老年流量:微短剧向左,小游戏向右 作者|AgeClub 干货抢先看 1.《黑神话:悟空》走红,吸引大量玩家入坑单机市场。与硬核单机游戏不同,在渗透率更高的小游戏领域,聚集了更多“网瘾”中老年…

MySQL OnlineDDL添加字段

alter 添加字段 5.7 默认是algorithminplace以及locknone来进行DDL操作,但是添加列整个执行过程中也会部分涉及到Copy Table。 如果有碎片比较大,因为会copy表会碎片整理, 添加字段成功后有可能磁盘使用空间降低,添加过程中磁盘…

WPF中如何简单的使用MvvmLight创建一个项目并进行 增删改查

目录 第一步:创建项目后下载如下两个NuGet程序包,然后删除删掉using Microsoft.Practices.ServiceLocation; 并且引入using CommonServiceLocator; 第二步:删除原来的XAML文件并创建如下的包结构然后创建一个在View文件夹中创建一个Main窗体 …

ssm校园媒体信息发布系统—计算机毕业设计源码42272

目 录 摘要 1 绪论 1.1研究背景与意义 1.2国内外研究现状 1.3研究内容 1.4 ssm框架介绍 1.5论文结构与章节安排 2 校园媒体信息发布系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十一章 制作Ubuntu文件系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

【数据结构】线性表——链表

写在前面 本篇笔记记录线性表——链表的主要形式,虽然链表有8种形式,但是只要精通笔记中编写的两种,即可触类旁通。 文章目录 写在前面一、链表的概念及结构二、链表的分类三、无头单向非循环链表3.1、链表的实现3.1.1、链表的结构体定义3.1…

Java:168 springboot小区团购管理

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 ​ 系统有管理员,用户两个角色。 主要的功能有用户信息管理、商品信息管理、商品类型管理、商品订单管理、公告信息管理、公告类型管理 …

CSS如何改变滚动条的颜色样式粗细?

默认滚动条很丑怎么办?如何改版滚动条的粗细,颜色,让它更美观?CSS如何改变滚动条的粗细? 干货来了 /* Webkit内核浏览器的滚动条样式 */ ::-webkit-scrollbar {width: 4px; /* 设置滚动条的宽度 */ }::-webkit-scroll…

idea连接docker并构建镜像

安装docker 安装docker idea连接docker 安装docker插件 设置docker连接 设置docker.exe 这个docker.exe是为了运行docker,可以通过安装docker desktop获取 docker desktop下载地址 右键图标找到文件位置 在同级的resource中 编写Dockerfile # 使用官方 Nginx…

你竟然赶我走

目录 解题思路 题目设计原理 总结 解题思路 拿到图看属性没问题,格式是 jpg 的,但是这张图片肯定不简单。 文件分离不出东西。 使用 stegsolve 打开,使用文件格式分析功能,拉到最底下,flag 浮出水面。好吧&#xff…

ssm065基于JAVA WEB技术大健康综合咨询问诊平台的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:健康综合咨询问诊平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本健康综合咨询…

masm汇编字符输入换行输出演示

从键盘读取一个字符并换行输出 assume cs:codecode segmentstart:mov ah, 1int 21hmov bl, almov dl, 10 mov ah, 2int 21h mov dl, blmov ah, 2int 21hmov ah, 4chint 21hcode ends end start 效果演示:

设备管理网关(golang版本)

硬件设备:移远EC200A-CN LTE Cat 4 无线通信模块 操作系统:openwrt 技术选型:layui golang sqlite websocket 工程结构 界面展示 区域管理 设备管理 运行监控 系统参数 资源文件 版本信息