aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2021-05-30-changing-git-authors.org
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2024-07-28 19:46:20 -0500
committerChristian Cleberg <hello@cleberg.net>2024-07-28 19:46:20 -0500
commit2be43cc479dfd4cfb621f14381330c708291e324 (patch)
tree7ac50f99425c5524c0820360754045b80d1bafcc /content/blog/2021-05-30-changing-git-authors.org
parentafe76ac7d7498b862abaa623790b91410e34574d (diff)
downloadcleberg.net-2be43cc479dfd4cfb621f14381330c708291e324.tar.gz
cleberg.net-2be43cc479dfd4cfb621f14381330c708291e324.tar.bz2
cleberg.net-2be43cc479dfd4cfb621f14381330c708291e324.zip
conversion from Zola to Weblorg
Diffstat (limited to 'content/blog/2021-05-30-changing-git-authors.org')
-rw-r--r--content/blog/2021-05-30-changing-git-authors.org73
1 files changed, 73 insertions, 0 deletions
diff --git a/content/blog/2021-05-30-changing-git-authors.org b/content/blog/2021-05-30-changing-git-authors.org
new file mode 100644
index 0000000..937a151
--- /dev/null
+++ b/content/blog/2021-05-30-changing-git-authors.org
@@ -0,0 +1,73 @@
+#+date: <2021-05-30>
+#+title: Changing Git Authors
+#+description:
+
+
+* Changing Git Author/Email Based on Previously Committed Email
+
+Here's the dilemma: You've been committing changes to your git
+repository with an incorrect name or email (or multiple repositories),
+and now you want to fix it. Luckily, there's a semi-reliable way to fix
+that. While I have never experienced issues with this method, some
+people have warned that it can mess with historical hashes and integrity
+of commits, so use this method only if you're okay accepting that risk.
+
+Okay, let's create the bash script:
+
+#+begin_src sh
+nano change_git_authors.sh
+#+end_src
+
+The following information can be pasted directly into your bash script.
+The only changes you need to make are to the following variables:
+
+- =OLD_EMAIL=
+- =CORRECT_NAME=
+- =CORRECT_EMAIL=
+
+#+begin_src sh
+#!/bin/sh
+
+# List all sub-directories in the current directory
+for dir in */
+do
+ # Remove the trailing "/"
+ dir=${dir%*/}
+ # Enter sub-directory
+ cd $dir
+
+ git filter-branch --env-filter '
+
+ OLD_EMAIL="old@example.com"
+ CORRECT_NAME="your-new-name"
+ CORRECT_EMAIL="new@example.com"
+
+ if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
+ then
+ export GIT_COMMITTER_NAME="$CORRECT_NAME"
+ export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
+ fi
+ if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
+ then
+ export GIT_AUTHOR_NAME="$CORRECT_NAME"
+ export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
+ fi
+ ' --tag-name-filter cat -- --branches --tags
+
+ git push --force --tags origin 'refs/heads/*'
+
+ cd ..
+done
+#+end_src
+
+Finally, save the bash script and make it executable.
+
+#+begin_src sh
+chmod a+x change_git_authors.sh
+#+end_src
+
+Now you can run the script and should see the process begin.
+
+#+begin_src sh
+./change_git_authors.sh
+#+end_src