aboutsummaryrefslogtreecommitdiffstats
path: root/_posts/2020-12-06-fossil-to-git.md
diff options
context:
space:
mode:
Diffstat (limited to '_posts/2020-12-06-fossil-to-git.md')
-rw-r--r--_posts/2020-12-06-fossil-to-git.md51
1 files changed, 51 insertions, 0 deletions
diff --git a/_posts/2020-12-06-fossil-to-git.md b/_posts/2020-12-06-fossil-to-git.md
new file mode 100644
index 0000000..c32e2da
--- /dev/null
+++ b/_posts/2020-12-06-fossil-to-git.md
@@ -0,0 +1,51 @@
+---
+title: fossil export to git
+author: la-ninpre
+tags: [fossil, git, tutorial]
+---
+
+i was trying to export my website repo to fossil using suggested method from
+[fossil website][1]:
+
+```
+git fast-export --all | fossil import --git repo.fossil
+```
+[1]:https://www.fossil-scm.org/home/doc/trunk/www/inout.wiki
+
+but i didn't like that fossil recognizes my email as username and so commit
+messages user was `user@example.com` instead of `user`.
+
+i then read a bit about options of `git fast-export` and found `--anonymize`
+flag. but it's results weren't satisfying either.
+
+when i looked on a raw output of `git fast-export`, i noticed that commit author
+is specified there as
+
+```
+author user <user@example.com>
+```
+
+and then it's flashed in my head: why not pipe git export through sed and just
+replace the contents of `<>` with username instead of email.
+
+so the final command looks like this:
+
+```
+git fast-export --all | \
+ sed -E 's/^((author)|(committer))[[:blank:]]+([[:graph:]]+)[[:blank:]]+(<[[:alnum:]]+@[[:alnum:]]+\.[[:alnum:]]+>)/\1 \4 <\4>/' | \
+ fossil import --git repo.fossil
+```
+
+and it converts
+
+```
+author user <user@example.com>
+```
+
+to
+
+```
+author user <user>
+```
+
+which is odd, but fine for fossil import.