最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js實(shí)現(xiàn)批量修改git項(xiàng)目的數(shù)據(jù)源(步驟詳解)

 更新時(shí)間:2024年11月12日 09:33:01   作者:小灰灰學(xué)編程  
文章介紹了如何使用Node.js腳本批量修改大型項(xiàng)目中各個(gè)項(xiàng)目的Git地址域名,通過引入模塊、聲明域名常量、定義遍歷函數(shù)和修改目錄等步驟,實(shí)現(xiàn)一次性批量修改,從而節(jié)省時(shí)間和精力

        在項(xiàng)目開發(fā)過程中,大型項(xiàng)目會分塊,每一塊都會擁有一個(gè)git地址,當(dāng)想切換git地址的域名時(shí),如果手動一個(gè)一個(gè)去修改對我們來說費(fèi)時(shí)費(fèi)力的事情,如果能有一個(gè)腳本,一次性批量修改,可以給大家節(jié)省很多時(shí)間成本。

一般來講,git源切換只是修改了域名,項(xiàng)目名稱基本不會變化

步驟1:引入對應(yīng)模塊

// 引入對應(yīng)模塊
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 = '.'; // 當(dāng)前目錄,可以修改為其他目錄

 步驟3:定義一個(gè)函數(shù),用于遍歷當(dāng)前目錄下的所有項(xiàng)目,當(dāng)然,你可以根據(jù)文件夾名稱進(jìn)行過濾

// 查找 Git 倉庫并切換遠(yuǎn)程 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'))) {
              // 這是一個(gè) Git 倉庫
              changeGitRemote(fullPath);
            }
          }
        }
    });
}

 步驟4:逐個(gè)修改項(xiàng)目git地址(注意:進(jìn)入一個(gè)文件夾執(zhí)行修改命令后,需要退出當(dāng)前文件夾,回到上一級目錄,不然可能會出現(xiàn)找不到下一個(gè)項(xiàng)目的報(bào)錯(cuò)提示)

process.chdir(folderPath); // 修改當(dāng)前工作目錄

process.chdir('..'); // 返回上一級目錄

// 切換 Git 遠(yuǎn)程倉庫 URL(只替換域名)
function changeGitRemote(folderPath) {
  try {
    process.chdir(folderPath);
    // 獲取當(dāng)前遠(yuǎn)程倉庫的 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);
        // 設(shè)置新的遠(yuǎn)程倉庫 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()); // 理論上這里不需要,因?yàn)?process.chdir 是對當(dāng)前進(jìn)程的修改,但為清晰起見還是加上
    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 = '.'; // 當(dāng)前目錄,可以修改為其他目錄
// 查找 Git 倉庫并切換遠(yuǎn)程 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'))) {
          // 這是一個(gè) Git 倉庫
          changeGitRemote(fullPath);
        }
      }
    }
  });
}
// 切換 Git 遠(yuǎn)程倉庫 URL(只替換域名)
function changeGitRemote(folderPath) {
  try {
    process.chdir(folderPath);
    // 獲取當(dāng)前遠(yuǎn)程倉庫的 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);
        // 設(shè)置新的遠(yuǎn)程倉庫 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()); // 理論上這里不需要,因?yàn)?process.chdir 是對當(dāng)前進(jìn)程的修改,但為清晰起見還是加上
    process.chdir('..');
  } catch (error) {
    console.error(`Error processing ${folderPath}:`, error);
  }
}
// 主函數(shù)
function main() {
  changeGitRemotesInFolders(SEARCH_DIR);
}
main();

到此這篇關(guān)于node.js實(shí)現(xiàn)批量修改git項(xiàng)目的數(shù)據(jù)源的文章就介紹到這了,更多相關(guān)node.js批量修改git項(xiàng)目的數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • socket.io學(xué)習(xí)教程之基礎(chǔ)介紹(一)

    socket.io學(xué)習(xí)教程之基礎(chǔ)介紹(一)

    socket.io提供了基于事件的實(shí)時(shí)雙向通訊,所以下面這篇文章主要介紹了關(guān)于socket.io的相關(guān)資料,主要介紹了學(xué)習(xí)socket.io的基礎(chǔ)知識,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • Node.js中的異步生成器與異步迭代詳解

    Node.js中的異步生成器與異步迭代詳解

    這篇文章主要給大家介紹了關(guān)于Node.js中異步生成器與異步迭代的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • nodejs express配置自簽名https服務(wù)器的方法

    nodejs express配置自簽名https服務(wù)器的方法

    這篇文章主要介紹了nodejs express配置自簽名https服務(wù)器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • 基于Node.js實(shí)現(xiàn)一鍵生成個(gè)性化二維碼

    基于Node.js實(shí)現(xiàn)一鍵生成個(gè)性化二維碼

    這篇文章主要為大家詳細(xì)介紹了如何使用Node.js、Jimp和QRCode庫,結(jié)合一個(gè)簡單的腳本,通過命令行命令來快速給二維碼加上指定的背景,打造更有個(gè)性化的二維碼,感興趣的可以了解下
    2024-03-03
  • Node 代理訪問的實(shí)現(xiàn)

    Node 代理訪問的實(shí)現(xiàn)

    這篇文章主要介紹了Node 代理訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Node.js中ES6模塊化及Promise對象

    Node.js中ES6模塊化及Promise對象

    這篇文章主要介紹了Node.js中ES6模塊化及Promise對象,node.js?遵循了?CommonJS?的模塊化規(guī)范,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • npm配置淘寶鏡像的教程詳解

    npm配置淘寶鏡像的教程詳解

    npm淘寶鏡像,也稱為npm cnpm或npm.taobao.org,是一個(gè)針對npm包管理器的國內(nèi)鏡像服務(wù),通過設(shè)置npm淘寶鏡像,你可以更快地下載和安裝依賴,本文給大家介紹了npm配置淘寶鏡像的教程,需要的朋友可以參考下
    2024-07-07
  • Node.js開啟Https的實(shí)踐詳解

    Node.js開啟Https的實(shí)踐詳解

    最近因?yàn)楣ぷ餍枰?,需要將網(wǎng)站切換到了https。其實(shí)去年就想遷的遷移過去,但是資金緊缺就找了個(gè)免費(fèi)的證書,實(shí)際效果不是很好。但是最近騰訊云推出了免費(fèi)的ssl證書申請。樓主是親測有效的。下面通過本文來一起看看Node.js開啟Https的詳細(xì)步驟吧,有需要的可以參考借鑒。
    2016-10-10
  • 搭建pomelo 開發(fā)環(huán)境

    搭建pomelo 開發(fā)環(huán)境

    Pomelo是基于 Node.js 的高性能、分布式游戲服務(wù)器框架。它包括基礎(chǔ)的開發(fā)框架和相關(guān)的擴(kuò)展組件(庫和工具包),可以幫助你省去游戲開發(fā)枯燥中的重復(fù)勞動和底層邏輯的開發(fā)。Pomelo不但適用于游戲服務(wù)器開發(fā),也可用于開發(fā)高實(shí)時(shí) Web 應(yīng)用
    2014-06-06
  • 參考?EventEmitter實(shí)現(xiàn)一個(gè)簡單的訂閱發(fā)布功能函數(shù)

    參考?EventEmitter實(shí)現(xiàn)一個(gè)簡單的訂閱發(fā)布功能函數(shù)

    這篇文章主要為大家介紹了參考?EventEmitter實(shí)現(xiàn)一個(gè)簡單的訂閱發(fā)布功能函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評論

兴化市| 高台县| 东阳市| 根河市| 札达县| 和田县| 海安县| 和龙市| 宾阳县| 保靖县| 胶南市| 德保县| 江陵县| 罗源县| 南宫市| 翁源县| 孟津县| 喀喇沁旗| 新巴尔虎右旗| 金昌市| 绍兴县| 普兰县| 繁昌县| 富顺县| 中宁县| 枞阳县| 波密县| 高邮市| 平和县| 漳州市| 宣恩县| 简阳市| 洛隆县| 容城县| 霍林郭勒市| 大足县| 鄂托克前旗| 巴中市| 驻马店市| 闽侯县| 阿拉善右旗|