tensixtyone

Rants of Andrew Williams / Nik_Doof

Archive for the ‘guide’ tag

Importing History into Git

without comments

With my recent move over to Git for my VCS Home solution I decided to start afresh with new repositories and not migrating the history over, in the last few days i’ve noted that it was a very bad decision and having the full history will always be useful. Now i’m stuck in the situation of two repos with different histories. How do you reconcile these two trees into one full history tree?

First of all we need a working Git version of your existing repo, in my case, it’s in SVN, so I used the git-svn tool to import my svn repository.

$ cd ~/dev/
$ git svn clone http://tensixtyone.com/svn/home/trunk/bash

Git then downloads each SVN commit and imports it, this can be quite slow on large repositories but thankfully mine was only 20 or so commits. Now you have your originally repository in Git format the few final steps will bring in the changes you have done in the new repository.

To import the history we are going to generate a set of diffs, while this sounds less than ideal it is really the only clean way to get your new commits into your old repository, attempting to pull the commits in will throw errors as the commit hashes will not match.

First of all you need to find out the hash of your first commit in your new repository

$ cd ~/.dotfiles/bash
$ git log

...

commit ec508803a080f2146231fb4cd396cc18a2906a9b
Author: Andrew Williams
Date:   Sat Apr 11 02:32:07 2009 +0100

    Imported initial bash files

Then generate the diffs since that initial commit

$ git format-patch ec508803a080f2146231fb4cd396cc18a2906a9b..HEAD
0001-Added-bash_logout-file.patch
0002-Updated-bash-config-files.patch
0003-Updated-a-few-aliases.patch
0004-Updated-prompt-to-detect-if-we-re-using-vcsh.patch
0005-Fixed-nano-alias.patch

Now you have your fresh diffs, you need to import them into your existing repository. In addition i’m importing these into a new branch.

$ cd ~/dev/bash/
$ git branch new-bash
$ git am ~/*.patch

The am command is mostly used to apply patches from a mailbox but for this case we can just tell it to use the patch files instead. After the command has completed you should be able to check git log and be able to see all the new commits.

Once your happy with the patches, it’s a case of switching to master and merging the changes.

$ git checkout master
$ git merge new-bash

One thing to note, after this process the commits will have different hashes, so it wont be a simple case of pushing to your remote repo. I’d only recommend doing this if you have to, i’m sure that a better proceedure exists but this is what worked for me.

Written by Andrew Williams

April 15th, 2009 at 1:31 pm

Posted in General, Technology

Tagged with , ,

Dropbox on Debian

with 6 comments

Dropbox is out of closed beta and is open for the public, but what is more interesting is that they now have a client for Linux. I’ve had a beta email sat in my inbox for about 3-4 months, but I’ve never got round to signing up as I couldn’t get a client for Linux.

Dropbox is one of the new wave of online storage, sort of a cross between WebDAV and SVN, in fact, I’d say its almost exactly like SVN, just with a nice GUI. I guess all it would need to take the “value-added” part of this product is for someone to develop a nice front end for Amazon S3, and by looking at their future prices it could be cheaper.

Anyway, picking out the bits of the service is not what I’m here to do. At the moment I run a Debian Testing/Unstable desktop machine, I was quite disappointed to not see a specific Debian package for their software on the website. I realised after a few dumb minutes that I could use the Ubuntu packages.

In sources.list, I referenced their Gusty archive

deb http://www.getdropbox.com/static/ubuntu gutsy main

Then in /etc/apt/preferences I set some basic package pinning to make sure that any packages didn’t collide with the existing Debian repository, not likely but you never know.

Package: *
Pin: release a=gutsy
Pin-Priority: 400

Do a “apt-get update” and you should have the “nautilus-dropbox” package available to install. Simple!

Remember, you’ll need to restart nautilus by either killing it (killall -9 nautilus) or restarting your Gnome session.

[edit: Fixed the first URL]

Written by Andrew Williams

September 13th, 2008 at 8:45 am