Copies of copies
As it so happens the ABCL main repository is held in Subversion, but since I'm
more productive with Git I usually use a conversion to Git via the git-svn
program. I've based my own copy off of slryus'
one, however I had to fetch and update my own
local copy since neither of us had done any fetching in quite some time. I'm
writing down some notes below to make sure I (or others) can repeat the process
in the future.
First we need a copy of an existing Git conversion.
git clone https://github.com/Ferada/abcl.git abcl-git
# or in case you have SSH access
git clone git@github.com:Ferada/abcl.git abcl-git
The master
branch should be a direct mirror of the SVN repository, i.e. only
have commits with git-svn
annotations, like
git-svn-id: http://abcl.org/svn/trunk/abcl@14851 1c010e3e-...
.
Next we want to initialise the SVN remote and fetch the new commits.
git svn init --prefix=abcl/ http://abcl.org/svn/trunk/abcl
git svn fetch -r 14791:14851
Note that the first revision in the fetch
command is the last one in the Git
master
branch and the other one is the current HEAD
of the SVN repository.
This process will take just a few moments, however while all the new commits
will be based off of the master
branch in Git, the first commit will be a
duplicate and have more changes than the existing commit in Git
.
2015-08-31 20:55 mevenson │ │ o │ │ │ ansi-test: reference new git repository
2015-07-01 04:16 mevenson o─┴─│─┴─┴─┘ abcl-asdf: fix usage with local repository <<<<
2015-07-01 04:16 mevenson │ I─┘ abcl-asdf: fix usage with local repository <<<<
2015-06-30 18:42 mevenson o abcl-asdf: correct metadata
The newly created first commit (14791 here) has lots of changes.
.dir-locals.el
CHANGES
COPYING
MANUAL
README
abcl.asd
abcl.bat.in
...
While the second, pre-existing one, has way less (and is just showing the same changes that are in the SVN commit).
contrib/abcl-asdf/abcl-asdf.asd
contrib/abcl-asdf/abcl-asdf.lisp
contrib/abcl-asdf/maven-embedder.lisp
To correct that and continue with a linear history I'm using the interactive rebase command.
git co -b test
git reset --hard abcl/git-svn
git rebase -i <commit _before_ the duplicated one>
Copy the hash of the correct, smaller commit and replace the pick ...
line
(at the top) that contains the duplicated commit with the one from the
cloned-from Git repository, then exit the editor. Once the rebase is done we
just need to update the ref for git-svn
.
git update-ref refs/remotes/abcl/git-svn test
Note the syntax. If done correctly it will be updated in e.g. tig
, if not
there'll be a new entry showing up in git show-ref
.
Lastly we want to rebase master
to get the new commits.
git co master
git co -D test
git rebase abcl/git-svn master
Which will look somewhat like this:
2016-06-13 08:06 mevenson o [master] {abcl/git-svn} {github/master} doc: note changes for abcl-1.3.4
2016-05-16 23:05 mevenson o Update to asdf-3.1.7
2016-05-16 21:43 mevenson o Update to jna-4.2.2
And push the updates.
git push origin master