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

devtools/2024/11/14 7:53:25/

        在项目开发过程中,大型项目会分块,每一块都会拥有一个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.ppmy.cn/devtools/133454.html

相关文章

Linux如何将文件或目录打成rpm包?-- rpmbuild打包详解

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

解决部署RKE2或K3S-“docker.io/rancher/mirrored-pause:3.6\“: -无法拉取镜像办法

一、根因 1、默认的仓库在docker你懂的。 二、修改拉取的仓库前缀 1、创建文件 /etc/rancher/k3s/registries.yaml k10-01:~ # cat /etc/rancher/k3s/registries.yaml mirrors:docker.io:endpoint:- "https://m.daocloud.io" *填充上即可。

快速复制两个list

Part1 在 Java 17 中&#xff0c;有几种方法可以快速复制两个列表&#xff08;List&#xff09;。以下是几种常用的方法&#xff1a; 1. 使用 new ArrayList<>(originalList) 这是最常见和最简单的方法&#xff0c;可以创建一个新的 ArrayList 实例&#xff0c;并将原…

SQL,力扣题目1194,锦标赛优胜者

一、力扣链接 LeetCode1194 二、题目描述 Players 玩家表 -------------------- | Column Name | Type | -------------------- | player_id | int | | group_id | int | -------------------- player_id 是此表的主键(具有唯一值的列)。 此表的每一行表示每个玩…

CMake 实战

我现在项目的目录结构如下 project_root/ ├── CMakeLists.txt ├── main.cpp 主函数 ├── third_part/ │ ├── CMakeLists.txt # 总的 third_part CMakeLists.txt │ ├── json/ │ │ ├── CMakeLists.txt # json 的 CMakeLists.txt │ │ └── json.hpp │ ├…

vue的样式知识点

一、样式的定义 1、基本定义&#xff1a;Vue样式通常使用<style>标签在单文件组件中定义。这些样式可以应用于模板中的HTML元素。 2、全局样式&#xff1a;在Vue项目的根组件中引入全局样式文件&#xff0c;全局样式文件中的样式会应用到整个项目中的所有组件。 3、局…

智象未来(HiDream.ai):从科技创新启程,绘制智能未来新篇章

在人工智能领域飞速演进的当下&#xff0c;智象未来&#xff08;HiDream.ai&#xff09;作为全球领先的多模态生成式人工智能技术供应商&#xff0c;正以其独树一帜的视觉多模态大模型及创新应用&#xff0c;推动行业趋势的前进。智象未来&#xff08;HiDream.ai&#xff09;自…

【Linux】进程信号全攻略(一)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 信号的概念 二&#xff1a;&#x1f525; 信号产生的方式 &#x1f98b; 使用键盘&#x1f98b; 系统调用函数&#x1f98b; 软件条件&#x1f98b; 进程异…