Last active
August 23, 2024 21:04
-
-
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 [email protected]:bonovoxly/source.git | |
git clone [email protected]: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 | |
``` |
Thanks for publishing this! I think there's one more typo:
git checkout filter-source
should be git checkout -b filter-source
Thank you for publishing this!
I ran into some gotchas:
- Install git-filter-repo
- If you need to move files into a different directory structure or rename them, make sure to do this in a separate, isolated commit -- don't include any other changes in that commit!
- To view the pretty git history made possible by your gist:
git log --follow $FILEPATH
#3 will allow you to see the git history of the file after it has been renamed, so long as you follow #2
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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