Comments (5)
There are three different ways I can think of to handle this:
-
Assuming you ran something like this:
git clone file:///PATH/TO/MIGRATED/REPO MYREPO
cd MYREPO
git filter-repo ...
and the git filter-repo modified all branches (despite the fact that you didn't want it to touch master), you could then restore the original master branch like so:
git checkout OTHER_BRANCH
git fetch origin +refs/heads/master:refs/heads/master
- You could operate on all refs, but specify the filter such that it does nothing when the tree is already correct. For example,
git filter-repo --commit-callback '
if any(change.filename.startswith(b"src/") for change in commit.file_changes):
return
for change in commit.file_changes:
change.filename = b"src/" + change.filename
'
- You could specify the specific refs you want to run by just listing all the refs you do want to edit after the --refs flag. This could look something like:
git filter-repo --refs $(git for-each-ref --format='%(refname)' | grep -v refs/heads/master)
However, the --refs flag also turns off a number of other things you may expect, such as renaming remote tracking branches into normal branches, deleting the old history afterwards, etc. because it doesn't want to delete anything meaningful that you didn't explicitly choose to rewrite and there could be lots of overlap between a branch you didn't overwrite and one you did.
My preference if I were doing this would be roughly (1) then (2) then (3). Hope that helps you get started.
from git-filter-repo.
I'll go ahead and close assuming this answered your question, but let me know if that's a bad assumption.
from git-filter-repo.
Sorry, I'm slow. I haven't looked at this further. Promise I'll come back with my findings after I attempt them. Appreciate your help with this a lot, though.
from git-filter-repo.
So, again, sorry for the slow response, but I succeeded, with your suggestions. Option 1 didn't really work as the master
branch was still touched.
Option 2 ( and I assume you actually meant git filter-repo
and not git filter-branch
?) worked perfectly. However, commit hashes changed for the entire histories of the branches, so it took some work for me to rebase the branches on master
. But in the end I ended up with all my code in a ./src
subdirectory for all branches.
Thanks for all your help. How can I buy you a coffee?
from git-filter-repo.
Awesome, glad it worked out for you. Yes, I meant filter-repo and not filter-branch; I edited the comment to correct it. And yeah, changing commit hashes is expected when you're modifying commits; the hashes are a hash of the contents so if the contents change, then the hash has to change. I suspect you meant that there were some old commits that you didn't want the changes applied to, so you just rebased the newer commits on top of some old base.
Anyway, glad it all worked. I don't drink coffee (even being near it can sometimes give me a headache), but people saying thanks for the tool is much appreciated. :-)
from git-filter-repo.
Related Issues (20)
- Update submodule hashes?
- Renaming paths into pre-existing path causes double-nested paths (sometimes)
- Keep last 3 months of package-lock.json diffs only HOT 1
- Question: prune lfs files
- remark: Pity that this tool can't run scripts/programs and it is not clearly stated HOT 1
- minor: Logic error with `_commits_referenced_but_removed` on a GitHub Gist web url in commit message 😂
- Crash when path contains emoji HOT 1
- Question: Recommended way to log the usage of git filter-repo and related changes? HOT 1
- Callback that gives both filename and blob
- Breaking change in git 2.43 or 2.44 HOT 2
- lint-history: --refs argument not working at all HOT 1
- Test suite succedes with Python 3.11 but has multiple failures with Python 3.12 HOT 7
- Turns out my assumption was wrong: `git lfs migrate export --everything --include="*"` does rewrite the whole history, across all branches, reinjecting all the large files' consecutive versions ([see here](https://github.com/git-lfs/git-lfs/issues/910#issuecomment-551566315)). Awesome! HOT 1
- Support for SHA256
- FR: Filter into new repo HOT 1
- clean-ignore of filter-repo-demos does not handle utf-8 characters HOT 1
- Trouble with Lock File HOT 1
- Really-43e2c HOT 2
- > main HOT 1
- Renaming path and then renaming it back to the original name deletes path rather than renaming it HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from git-filter-repo.