Skip to content

2024.12.09


项目因技术栈或其他原因,会有迁移。迁移过程中,会存在原项目和新项目同时改动的情况,这里介绍下如何利用脚本提速。

首先并不是所有的情况都适合用脚本,如果原项目改动少,新项目改动多,直接手动复制粘贴即可。脚本更适合原项目改动文件多,手动复制工作量大、且易出错的情况。

1. 先找到diff文件

diff 可以从工蜂平台获得,在diff处,打开console,输入以下脚本,可以获取diff文件列表。

ts
const titleSelector = '.review-diffs-file__header--content a:first-of-type';
// 选择器可以能会变,灵活变通即可

function getAllDiffFiles() {
  const list = document.querySelectorAll(titleSelector);
  const titleList = [...list].map(item => item.innerText).map(item => item.trim());
  const json = JSON.stringify(titleList);


  console.log('titleList', titleList);
  console.log('json', json);
}
getAllDiffFiles();

2. 脚本复制

打开两个项目,注意 git pull 到最新。把上一步拿到的文件列表放到 temp.json 中,然后执行下面的脚本进行复制

ts
const path = require('path');
const fs = require('fs');
const { writeFileSync, readFileSync } = require('t-comm');
const diffFiles = require('./temp.json');


console.log('diffFiles', diffFiles);

const ROOT_MAP = {
  from: '/Users/yang/Documents/git-aow/web',
  to: '/Users/yang/Documents/git-aow/pvp-next',
};

function copyDiffFiles() {
  diffFiles.forEach((file) => {
    const from = path.resolve(ROOT_MAP.from, file);
    const to = path.resolve(ROOT_MAP.to, file);

    if (fs.existsSync(to)) {
      const content = readFileSync(from);
      writeFileSync(to, content);
    } else {
      console.log('not exist: ', to);
    }
  });
}

copyDiffFiles();

注意:

  1. 原项目和新项目都要 pull 到最新,想同步release分支,就切到release最新,develop同理。
  2. 注意一些已经删除的文件和移动文件,需要手动处理

3. 检查

最重要的一步就是检查,建议一边打开工蜂的 diff,一边打开 vscode 的diff,保留想保留的。最耗时间!