Assumed Audience: Hackers, Git users, code archeologists, and anyone who would need to do forensics on Yzena repositories.

Epistemic Status: Not confident; I don’t have perfect memory of what I did, but this is the best I’ve got.

Five months ago, I wrote about how I re-signed a few entire Git repos.

One of the requirements for my process was this:

It has to deal with a repo that is a bunch of combined repos.

That requirement was for a reason: on 01 Aug 2020, I finished combining a bunch of repos into one monorepo.

Originally, Yzena had a bunch of separate repositories:

  • One for C utilities that all others used.
  • One for data structures.
  • One for I/O and filesystem manipulation.

and a few others.

Eventually, these separate repositories became unwieldy because it separated concerns too much, and sometimes, I wanted to access internals of one repo in another.

So I started thinking about making a monorepo.

I read a lot to make the decision. Most people said that monorepos work best for tiny teams or massive companies, not inbetween.

Well, I am a tiny team: just one.

Thus, I bit the bullet and decided to combine the repos.

I decided to make the root repo, my C utilities, the monorepo.

This is why the monorepo is called “Yc.” That name is a stylized abbreviation for “Yzena C.”

The first thing I did, at least on most of them, was to put the entire repo contents in a folder named the same as the repo. So for example, I put all of the files in the dyna repo in the dyna/ folder, which made the src folder dyna/src in the repo.

This was to help prevent merge problems.

Now, I’m not stupid, so the next thing I did was to completely copy each repo so that the old versions would be available. And I still have those clones.

Fourth, one by one, I would merge a single repo into the root one using a command like this:

$ git merge <repo>/master --allow-unrelated-histories

I am not sure if that is the exact command for each one, but one thing I do clearly remember: I used the --allow-unrelated-histories option.

There were obviously merge problems, and I fixed them manually. I don’t remember what I had to do.

After that, I had to fix compile errors, where merges were not handled properly.

But that was it.

So what was my purpose to this?

To record what I did for posterity.

My father-in-law is a computer forensic expert, and during a recent vacation, I was at his house. We were talking about computer forensics, and I realized that if a forensics expert had to go through Yzena’s monorepo, they would hate me.

By recording what I did, I hope that their work would be easier.

And on that note, if someone does need to do forensics on my monorepo, let me know, and depending on your purpose, I might send you the original repos to make forensics easier. After all, comparison with before and after should make it easy.

This includes the clone of the monorepo from before the re-sign procedure; yes, I have that too.

If you need forensics for a lawsuit, I do want to be served with a subpoena. But if you do that, I’ll happily comply; I just want that for my records and to have proof that you do need the clones for the purposes of the lawsuit.

So if you need those clones, let me know.