node.js实现批量修改git项目的数据源(步骤详解)

 更新时间:2024年11月12日 09:33:01   作者:小灰灰学编程  
文章介绍了如何使用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项目的数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node.js中stream流中可读流和可写流的实现与使用方法实例分析

    node.js中stream流中可读流和可写流的实现与使用方法实例分析

    这篇文章主要介绍了node.js中stream流中可读流和可写流的实现与使用方法,结合实例形式分析了node.js stream流可读流和可写流基本分类、原理、定义、使用方法及相关注意事项,需要的朋友可以参考下
    2020-02-02
  • 吐槽一下我所了解的Node.js

    吐槽一下我所了解的Node.js

    用了一年多 Node.js, 现在已经是 Node.js 的脑残粉了,这篇日志比较杂,算是我对 Node.js 方方面面的一个集中吐槽。
    2014-10-10
  • node.js中的console.time方法使用说明

    node.js中的console.time方法使用说明

    这篇文章主要介绍了node.js中的console.time方法使用说明,本文介绍了console.time的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node.js Sequelize实现单实例字段或批量自增、自减

    node.js Sequelize实现单实例字段或批量自增、自减

    Sequelize 可以实现针对单个实例的一或多个字段的自增、自减操作,也可以对符合条件的数据进行批量的自增、自减操作。单个实例字段的自增、自减可以利用Instance的相应方法实现,而批量自增、自减则需要借助sequelize提供的字面量方法实现。下面来看看详细的介绍吧。
    2016-12-12
  • 使用ExcelJS快速处理Node.js爬虫数据

    使用ExcelJS快速处理Node.js爬虫数据

    Excel.js是一个强大的JavaScript库,它提供了方法处理Excel文件,例如创建和编辑工作簿、读取和写入数据、处理行和列、设置样式、导入和导出数据等,本文介绍使用ExcelJS快速处理Node.js爬虫数据的方法,一起看看吧
    2024-01-01
  • Node.js console控制台简单用法分析

    Node.js console控制台简单用法分析

    这篇文章主要介绍了Node.js console控制台简单用法,结合实例形式分析了nodejs console控制台功能、常见函数与简单使用技巧,需要的朋友可以参考下
    2019-01-01
  • Node.js中的模块路径解析规则和子模块包

    Node.js中的模块路径解析规则和子模块包

    NodeJS特性如事件驱动、异步编程、无阻塞IO,这些特性为它带来了高效的性能和更少的代码,require函数支持斜杠(/)或盘符(C:)开头的绝对路径,也支持./开头的相对路径,为了便于管理和使用,我们可以把由多个子模块组成的大模块称做包,并把所有子模块放在同一个目录里
    2023-11-11
  • node中IO以及定时器优先级详解

    node中IO以及定时器优先级详解

    这篇文章主要给大家介绍了关于node中IO以及定时器优先级的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用node具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • gyp ERR!报错问题解决办法

    gyp ERR!报错问题解决办法

    这篇文章主要给大家介绍了关于gyp ERR!报错问题的解决办法,文中将解决的办法介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • nodeJS实现简单网页爬虫功能的实例(分享)

    nodeJS实现简单网页爬虫功能的实例(分享)

    下面小编就为大家带来一篇nodeJS实现简单网页爬虫功能的实例(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论