├── .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 |
4 |
5 |
6 |
7 |
8 |
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 |
--------------------------------------------------------------------------------