Moving Git commits between repos (2017)

by piinbinaryon 1/2/2024, 6:21 PMwith 10 comments

by jezon 1/2/2024, 8:34 PM

If the goal is to move all the commits of one repo into another repo, Git provides subtree merges:

https://docs.github.com/en/get-started/using-git/about-git-s...

For companies that started out making lots of small repositories that want to moev incrementally to a monorepo, this strategy can be useful because it sets up the smaller repo as a self-contained unit of the larger repo, preserving things like git commit history and git blames. After a subtree merge, further steps can more tightly integrate the code into the larger repository (i.e., so that it is no longer wholly contained in the subtree).

by oftenwrongon 1/2/2024, 7:59 PM

I recommend using https://github.com/newren/git-filter-repo instead of filter-branch.

by jackconsidineon 1/2/2024, 8:30 PM

I merged two codebases (several thousand commits each) into a monorepo using a similar strategy. Instead of top level files in an api repo, and top level files in a web repo, we have packages/api and packages/web. It feels magical that I can open up a blame for a file in either package when most commits occurred in separate repos spanning back 5 years

by jaeckelon 1/2/2024, 8:02 PM

The mainstream version of this post is called subtree-merge and supported by recent Git versions ootb

by whoomp12341on 1/2/2024, 7:58 PM

How is this different from running git pull or git push to a remote?

by whateveraccton 1/2/2024, 8:15 PM

huh good to know. I often just make and apply patches when I'm dealing with different histories. Doesn't always work though.