批量修改指定仓库的git username 和git useremail

2020/12/7 2:30:21代码块git

一般的操作是这样:

修改一个仓库的name和email:

git config user.name xxx
git config user.email xx@xx.xx

全局修改

git config --global user.name xxx

做了一个批量修改指定仓库的小工具
index.js

const fs = require('fs')
const userNameUser = process.argv.splice(2)[0];

const rootPath = './'

const list = fs.readdirSync(rootPath);

if (!userNameUser||userNameUser.split(/[::]/).length!==2) {
	console.log('参数错误,请执行:`node setUserNameAndEmail.js name:email')
	return 
}
const name = userNameUser&&userNameUser.split(/[::]/)[0]
const email = userNameUser&&userNameUser.split(/[::]/)[1]

list.forEach(item => {
    let filePath = rootPath + item + '/.git/config'
    if (fs.existsSync(filePath)) {
        let file = fs.readFileSync(filePath, { encoding: 'utf-8' })

        let result = file.match(/\[user\]\s*name\s*=\s*[^\n]+\s*email\s*=\s*[^\n]+/)
        if (result) {
            result = result[0]
            let newResult = result.replace(/(name\s*=\s*)[^\n]+/, '$1' + name).replace(/(email\s*=\s*)[^\n]+/, '$1' + email)

            file = file.replace(result, newResult)
        } else {
            file += `[user]\n\tname = ${name}\n\temail = ${email}\n`
        }

        fs.writeFileSync(filePath, file, { encoding: 'utf-8' })

        console.log(`name=${name} email=${email} 设置成功`,filePath)
    }
})

执行方式:
把指定仓库放在同一个目录下,可以自动识别所有仓库。

node index.js name:email