Last active
March 29, 2024 22:03
-
-
Save bonovoxly/b4f7502f2b6cdb26a779dbfb73d4d134 to your computer and use it in GitHub Desktop.
git-filter-repo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## git-filter-repo | |
- Stage a working area. These are somewhat throwaway directories and local git repos. | |
- clone both source and target repos. | |
``` | |
mkdir my-working-dir | |
cd my-working-dir | |
git clone git@github.com:bonovoxly/source.git | |
git clone git@github.com:bonovoxly/target.git | |
``` | |
### In source repo | |
We checkout a branch that we will filter against. We specify the path(s) that we want. | |
``` | |
cd ./source | |
git checkout filter-source | |
git filter-repo --path ansible/ansible.cfg --path ansible/file.yml --path ansible/another-file.yml --refs refs/heads/filter-source --force | |
``` | |
## In target repo | |
``` | |
cd ../target | |
git checkout -b filter-target | |
git remote add repo-source ../source | |
git fetch repo-source | |
git branch branch-source remotes/repo-source/filter-source | |
git merge branch-source --allow-unrelated-histories | |
``` |
This worked perfectly for me. I was able to migrate a large number of files from one repo to another and retain the git history.
The nice thing is, if something goes wrong, you can just checkout main, delete the branch, start all over.
This did not work for me, when I checkout out main it was empty. I had to clone again. Great gist though.
It can really be simplified when pushing to a blank repository. After the filter
git remote add origin https://
git branch -M main
git push -u origin main
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Cool :) You might also want to change the blog entry since that is where I found it initially.
https://blog.billyc.io/how-to-copy-one-or-more-files-from-one-git-repo-to-another-and-keep-the-git-history/
I also used your tips plus the command
git filter-repo --to-subdirectory-filter <new_directory_name>
which I found somewhere else :)
to take a couple directories from one git repo - move them all to a new directory in the filter-source then merged that into another git repo including all the commit information.
P.S. Credit to the creators of the git filter-repo python script (https://github.com/newren/git-filter-repo)