--- /dev/null
+;;;;;
+title: Setting up an ABCL mirror from SVN to Git
+date: 2016-08-03 12:03:02
+format: md
+tags: git
+;;;;;
+
+## 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](https://github.com/slyrus/abcl), 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