├── .env.js ├── .gitignore ├── README.md ├── index.js ├── package-lock.json └── package.json /.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | GITHUB_USERNAME: "maykbrito", 3 | CORRECT_NAME:"Mayk Brito", 4 | CORRECT_EMAIL:"maykbrito@gmail.com" 5 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Welcome to Correct Git Author Name and Email 👋

2 |

3 | Version 4 | 5 | License: MIT 6 | 7 | 8 | Twitter: maykbrito 9 | 10 |

11 | 12 | > Simple script to correct github author and keep track of your github activities 13 | 14 | ⚠️ It will replace found author of all commits! 15 | 16 | 17 | ▶️ Watch the reason of this repo 18 | 19 | 20 | 21 | ## Install 22 | 23 | ```sh 24 | npm install 25 | ``` 26 | 27 | ## Usage 28 | 29 | 1. Adjust .env.js with your needed information 30 | 2. Run 31 | 32 | ```sh 33 | npm start 34 | ``` 35 | 36 | ## Author 37 | 38 | 👤 **Mayk Brito** 39 | 40 | * Website: gitshowcase.com/maykbrito 41 | * Twitter: [@maykbrito](https://twitter.com/maykbrito) 42 | * Github: [@maykbrito](https://github.com/maykbrito) 43 | * LinkedIn: [@maykbrito](https://linkedin.com/in/maykbrito) 44 | 45 | ## Show your support 46 | 47 | Give a ⭐️ if this project helped you! 48 | 49 | *** 50 | _💜_ 51 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const inquirer = require("inquirer"); 4 | const { promisify } = require('util') 5 | const { exec } = require('child_process') 6 | const { CORRECT_NAME, CORRECT_EMAIL, GITHUB_USERNAME } = require('./.env') 7 | 8 | const run = promisify(exec) 9 | 10 | 11 | console.log("\x1b[30m\x1b[43m%s\x1b[0m",` 12 | 13 | !! WARNING !! 14 | !! It will replace found author of all commits !! 15 | !! !! 16 | `); 17 | 18 | console.log(` 19 | Greetings, I will help you fix your github 20 | activities. 21 | 22 | I will prompt some questions ok? Let's go ! 23 | `) 24 | 25 | 26 | async function configureAnswers(answers) { 27 | 28 | const { repository, author } = answers; 29 | 30 | const step1 = `git clone --bare git@github.com:${GITHUB_USERNAME}/${repository}.git` 31 | const step2 = `cd ${repository}.git` 32 | const step3 = `git filter-branch --env-filter ' 33 | OLD_NAME="${author}" 34 | CORRECT_NAME="${CORRECT_NAME}" 35 | CORRECT_EMAIL="${CORRECT_EMAIL}" 36 | 37 | if [ "$GIT_COMMITTER_NAME" = "$OLD_NAME" ] 38 | then 39 | export GIT_COMMITTER_NAME="$CORRECT_NAME" 40 | export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" 41 | fi 42 | if [ "$GIT_AUTHOR_NAME" = "$OLD_NAME" ] 43 | then 44 | export GIT_AUTHOR_NAME="$CORRECT_NAME" 45 | export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" 46 | fi 47 | ' --tag-name-filter cat -- --branches --tags` 48 | const step4 = `git push --force --tags origin 'refs/heads/*'` 49 | const step5 = `cd ../ && rm -rf ${repository}.git` 50 | 51 | const { stdout } = await run(`${step1} && ${step2} && ${step3} && ${step4} && ${step5}`) 52 | 53 | console.log(stdout) 54 | console.log(`🎉 ALL DONE!`) 55 | process.exit() 56 | } 57 | 58 | inquirer.prompt([ 59 | { 60 | type: "input", 61 | name: "repository", 62 | message: "Github project (repo name only)" 63 | }, 64 | { 65 | type: "input", 66 | name: "author", 67 | message: "Author or Committer name to replace" 68 | } 69 | ]).then(configureAnswers) 70 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "correct-git-author-email", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/color-name": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 10 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" 11 | }, 12 | "ansi-escapes": { 13 | "version": "4.3.1", 14 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 15 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 16 | "requires": { 17 | "type-fest": "^0.11.0" 18 | } 19 | }, 20 | "ansi-regex": { 21 | "version": "5.0.0", 22 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 23 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 24 | }, 25 | "ansi-styles": { 26 | "version": "4.2.1", 27 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 28 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 29 | "requires": { 30 | "@types/color-name": "^1.1.1", 31 | "color-convert": "^2.0.1" 32 | } 33 | }, 34 | "chalk": { 35 | "version": "3.0.0", 36 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 37 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 38 | "requires": { 39 | "ansi-styles": "^4.1.0", 40 | "supports-color": "^7.1.0" 41 | } 42 | }, 43 | "chardet": { 44 | "version": "0.7.0", 45 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 46 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 47 | }, 48 | "cli-cursor": { 49 | "version": "3.1.0", 50 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 51 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 52 | "requires": { 53 | "restore-cursor": "^3.1.0" 54 | } 55 | }, 56 | "cli-width": { 57 | "version": "2.2.1", 58 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 59 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" 60 | }, 61 | "color-convert": { 62 | "version": "2.0.1", 63 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 64 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 65 | "requires": { 66 | "color-name": "~1.1.4" 67 | } 68 | }, 69 | "color-name": { 70 | "version": "1.1.4", 71 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 72 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 73 | }, 74 | "emoji-regex": { 75 | "version": "8.0.0", 76 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 77 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 78 | }, 79 | "escape-string-regexp": { 80 | "version": "1.0.5", 81 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 82 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 83 | }, 84 | "external-editor": { 85 | "version": "3.1.0", 86 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 87 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 88 | "requires": { 89 | "chardet": "^0.7.0", 90 | "iconv-lite": "^0.4.24", 91 | "tmp": "^0.0.33" 92 | } 93 | }, 94 | "figures": { 95 | "version": "3.2.0", 96 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 97 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 98 | "requires": { 99 | "escape-string-regexp": "^1.0.5" 100 | } 101 | }, 102 | "has-flag": { 103 | "version": "4.0.0", 104 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 105 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 106 | }, 107 | "iconv-lite": { 108 | "version": "0.4.24", 109 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 110 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 111 | "requires": { 112 | "safer-buffer": ">= 2.1.2 < 3" 113 | } 114 | }, 115 | "inquirer": { 116 | "version": "7.1.0", 117 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", 118 | "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", 119 | "requires": { 120 | "ansi-escapes": "^4.2.1", 121 | "chalk": "^3.0.0", 122 | "cli-cursor": "^3.1.0", 123 | "cli-width": "^2.0.0", 124 | "external-editor": "^3.0.3", 125 | "figures": "^3.0.0", 126 | "lodash": "^4.17.15", 127 | "mute-stream": "0.0.8", 128 | "run-async": "^2.4.0", 129 | "rxjs": "^6.5.3", 130 | "string-width": "^4.1.0", 131 | "strip-ansi": "^6.0.0", 132 | "through": "^2.3.6" 133 | } 134 | }, 135 | "is-fullwidth-code-point": { 136 | "version": "3.0.0", 137 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 138 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 139 | }, 140 | "lodash": { 141 | "version": "4.17.19", 142 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", 143 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" 144 | }, 145 | "mimic-fn": { 146 | "version": "2.1.0", 147 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 148 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 149 | }, 150 | "mute-stream": { 151 | "version": "0.0.8", 152 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 153 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 154 | }, 155 | "onetime": { 156 | "version": "5.1.0", 157 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 158 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 159 | "requires": { 160 | "mimic-fn": "^2.1.0" 161 | } 162 | }, 163 | "os-tmpdir": { 164 | "version": "1.0.2", 165 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 166 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 167 | }, 168 | "restore-cursor": { 169 | "version": "3.1.0", 170 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 171 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 172 | "requires": { 173 | "onetime": "^5.1.0", 174 | "signal-exit": "^3.0.2" 175 | } 176 | }, 177 | "run-async": { 178 | "version": "2.4.1", 179 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 180 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" 181 | }, 182 | "rxjs": { 183 | "version": "6.5.5", 184 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", 185 | "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", 186 | "requires": { 187 | "tslib": "^1.9.0" 188 | } 189 | }, 190 | "safer-buffer": { 191 | "version": "2.1.2", 192 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 193 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 194 | }, 195 | "signal-exit": { 196 | "version": "3.0.3", 197 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 198 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 199 | }, 200 | "string-width": { 201 | "version": "4.2.0", 202 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 203 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 204 | "requires": { 205 | "emoji-regex": "^8.0.0", 206 | "is-fullwidth-code-point": "^3.0.0", 207 | "strip-ansi": "^6.0.0" 208 | } 209 | }, 210 | "strip-ansi": { 211 | "version": "6.0.0", 212 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 213 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 214 | "requires": { 215 | "ansi-regex": "^5.0.0" 216 | } 217 | }, 218 | "supports-color": { 219 | "version": "7.1.0", 220 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 221 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 222 | "requires": { 223 | "has-flag": "^4.0.0" 224 | } 225 | }, 226 | "through": { 227 | "version": "2.3.8", 228 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 229 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 230 | }, 231 | "tmp": { 232 | "version": "0.0.33", 233 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 234 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 235 | "requires": { 236 | "os-tmpdir": "~1.0.2" 237 | } 238 | }, 239 | "tslib": { 240 | "version": "1.11.1", 241 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", 242 | "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" 243 | }, 244 | "type-fest": { 245 | "version": "0.11.0", 246 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 247 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" 248 | } 249 | } 250 | } 251 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "correct-git-author-email", 3 | "version": "1.0.0", 4 | "description": "Simple script to correct github author and keep track of your github activities", 5 | "main": "index.js", 6 | "bin": { 7 | "gitcorrect": "./index.js" 8 | }, 9 | "scripts": { 10 | "start": "node index.js" 11 | }, 12 | "author": "Mayk Brito", 13 | "license": "MIT", 14 | "dependencies": { 15 | "inquirer": "^7.1.0" 16 | } 17 | } 18 | --------------------------------------------------------------------------------