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); // 获取当前远程仓库的 URL const remoteUrl = execSync('git config --get remote.origin.url').toString().trim(); // 检查是否需要替换域名 if (remoteUrl.includes(OLD_DOMAIN)) { const newRemoteUrl = remoteUrl.replace(OLD_DOMAIN, NEW_DOMAIN); // 设置新的远程仓库 URL execSync(`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); // 获取当前远程仓库的 URL const remoteUrl = execSync('git config --get remote.origin.url').toString().trim(); // 检查是否需要替换域名 if (remoteUrl.includes(OLD_DOMAIN)) { const newRemoteUrl = remoteUrl.replace(OLD_DOMAIN, NEW_DOMAIN); // 设置新的远程仓库 URL execSync(`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();
到此这篇关于node.js实现批量修改git项目的数据源的文章就介绍到这了,更多相关node.js批量修改git项目的数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
这篇文章主要介绍了NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-07-07从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
这篇文章主要介绍了Node.js基于connect和express框架的多页面实现数学运算,简单讲述了connect和express框架的原理及数学运算相关操作技巧,需要的朋友可以参考下2017-04-04教你用Node.js与Express建立一个GraphQL服务器
GraphQL是一种通过强类型查询语言构建api的新方法,下面这篇文章主要给大家介绍了关于用Node.js与Express建立一个GraphQL服务器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2022-12-12
最新评论