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)