I need to split out a piece of functionality into a separate package. What’s the best way to do this while preserving the git history?
Since I know there are several success stories, I thought it would be useful to codify this here (even though it’s more a git issue than a Julia one).
4 Likes
To answer my own question:
-
Make a new copy of the package using git clone OLD NEW
-
Change to the NEW
directory
-
To keep only certain subdirectories in the new package, use the following single-line git
command, listing those subdirectories that you wish to keep (in this example, src/root_finding
and test/root_finding_tests
):
git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- src/root_finding test/root_finding_tests' --prune-empty -- --all
-
Make a new remote repository (e.g. using hub create
) and push the new package there.
-
In the repository for the old package, delete the files that have been moved, using git rm
.
6 Likes
I have a question.
Wouldn’t this mean that users that Pkg.add
both packages will also download both identical histories twice (and also take twice as much memory in disk)?
Is splitting without keeping history allowed?
Will not be a problem in a while (Pkg3) since using git repos will not be the common case.
1 Like