Go straight to solution ๐๐ป
Feel free to visit the same post in my home
Storytelling
I was working on four different repositories projects: frontend, sdk, smart contract, indexer.
But I was spending a bunch of time because the contract generates new types during the build and deployment using typechain lib.
I needed to replace all types in the SDK and indexer project, and we realized that the frontend app will need these types as well.
This work is manually copy/paste, adapt the code with the changes, commit, and push when it happens.
So, I decided to give a try Monorepo with TurboRepo.
My idea was to merge all repos without losing the history of commits on them.
For this, with a help of my friend @rjborba we did:
- created a new repo on GitHub:
project
using TurboRepo and their structure(apps, packages). - cloned each repo (frontend, sdk, smart contract, indexer) in another each folder (frontend2, sdk2, smart-contract2, indexer2).
- removed the origin from each repo and added the origin from
project
. - moved the files and folders to another folder: sample: frontend2 now is frontend2/apps/ keeping only the .git folder in the root folder. sdk2 now is packages/sdk.
- committed the changes in each folder, and
git push --all
andgit pull --allow-unrelated-histories
to merge and resolve conflicts.
This way I could have my Monorepo with all projects related to the history of commits in chronological order.
Technical Way
talk is cheap to show me the commands:
-
npx create-turbo@latest project
~/Developer/project (main) ยป tree -L 3 --gitignore tgmarinho@Thiagos-MacBook-Pro
.
โโโ README.md
โโโ apps
โ โโโ docs
โ โ โโโ README.md
โ โ โโโ next-env.d.ts
โ โ โโโ next.config.js
โ โ โโโ node_modules
โ โ โโโ package.json
โ โ โโโ pages
โ โ โโโ tsconfig.json
โ โโโ web
โ โโโ README.md
โ โโโ next-env.d.ts
โ โโโ next.config.js
โ โโโ node_modules
โ โโโ package.json
โ โโโ pages
โ โโโ tsconfig.json
โโโ package.json
โโโ packages
โ โโโ eslint-config-acme
โ โ โโโ index.js
โ โ โโโ node_modules
โ โ โโโ package.json
โ โโโ tsconfig
โ โ โโโ README.md
โ โ โโโ base.json
โ โ โโโ nextjs.json
โ โ โโโ package.json
โ โ โโโ react-library.json
โ โโโ ui
โ โโโ Button.tsx
โ โโโ index.tsx
โ โโโ node_modules
โ โโโ package.json
โ โโโ tsconfig.json
โโโ turbo.json
โโโ yarn.lock
Then host it to the GitHub and get the origin address: git@github.com:myaccount/project.git
Clone the project frontend:
git clone git@github.com:myaccount/frontend.git frontend2
cd frontend2 && mkdir apps
mv $(ls -la) frontend2/apps/
mv frontend2/apps/.git .
git remote remove origin
git remote add origin git@github.com:myaccount/project.git
git commit -m "send the frontend to monorepo"
git fetch -a
git pull --allow-unrelated-histories
git push --all
Repeat the process to other repo - SDK:
Clone the project sdk:
git clone git@github.com:myaccount/sdk.git sdk
cd sdk && mkdir apps
mv $(ls -la) sdk/packages/
mv sdk/packages/.git .
git remote remove origin
git remote add origin git@github.com:myaccount/project.git
git commit -m "send the sdk to monorepo"
git fetch -a
git pull --allow-unrelated-histories
git push --all
Repeat the process to other repo - INDEXER:
Clone the project indexer:
git clone git@github.com:myaccount/indexer.git indexer
cd indexer && mkdir apps
mv $(ls -la) indexer/packages/
mv indexer/packages/.git .
git remote remove origin
git remote add origin git@github.com:myaccount/project.git
git commit -m "send the sdk to monorepo"
git fetch -a
git pull --allow-unrelated-histories
git push --all
Finish โ๐ป
Ref: gist x-yuri
__
Thanks for reading ๐
Top comments (0)