29 April 2010

Resolution for "fatal: unable to run 'git-svn'"

Debian bug:

When running "git svn clone" on a large repository, every a few revisions
or a single big one it stops with:

fatal: unable to run 'git-svn'

git svn fetch resumes the clone, stopping again after a few revisions. If
you keep resuming it long enough, the clone ultimately succeeds.


Thanks, Adam! Even if continually resuming with git svn fetch isn't an elegant solution, it worked for me!

14 April 2010

Review: Microsoft Office 2008 (Mac)

Microsoft Office for Mac 2008 Business Edition


A decent set of software. If you've used Office 2007 for Windows, you'll find that this has a similar set of functionality.

A coule good reasons to buy this:

1. You're forced to work with .docx, .xlsx, .pptx, and other x files. OpenOffice doesn't handle them very well.
2. It's required for work or school.

It's not worth the cost unless you need it for one of those reasons. I get annoyed with it because it doesn't feel like a Mac app, doesn't have the standard keyboard shortcuts (Cmd-Shift-S doesn't mean "Save As..."), doesn't resize right. It's just not a real, solid Mac app the way Mail is, the way iCal is, the way 1Password is.

If you need to create basic documents and spreadsheets, check out OpenOffice or Google Docs.

07 April 2010

Quote: OS X is the most productive development environment that I've ever used

"OS X is the most productive development environment that I’ve ever used." -
Bob Kross

31 March 2010

Git Aliases

"With aliases, you can avoid typing the same commands over and over again." - from the Aliases page on the Git SCM Wiki

Once I found this, I immediately created the following aliases in ~/.gitconfig, as I frequently used these with Subversion.

ci = commit
st = status

I'm also fond of the llog alias mentioned on the wiki that displays the log with dates in your local timezone.

llog = log --date=local

Additionally, I added an alias that diffs my local repository (committed changes) with our remote Subversion repository, showing changes that aren't committed to Subversion.

sdiff = diff --name-status remotes/git-svn

24 March 2010

A case for git-svn (Git + Subversion)

Why git-svn?

1. Our central repository is Subversion and that's not changing. Otherwise, I'd be using Git without Subversion.
2. I wanted to have a way to do local commits that aren't quite ready for the central repository. This gives me a way to track my small changes by setting checkpoints (local commits) without breaking the build on our CI server.
3. The majority of ThoughtWorkers say Git is Best in Class.
4. Joel Spolsky is sold on Distributed Version Control:
This is too important to miss out on. This is possibly the biggest advance in software development technology in the ten years I’ve been writing articles here.

Or, to put it another way, I’d go back to C++ before I gave up on Mercurial.

5. Even without an internet connection, I can work and commit locally as well as view the entire Subversion log.

If you're stuck using Subversion as a central repository, you should check out git-svn.

Further reading:
git-svn - Bidirectional operation between a Subversion repository and git

git svn status - showing changes that are not committed to svn

17 March 2010

Subversion global-ignores

To force your svn client to ignore files and folders from Subversion without using the svn:ignore property, edit ~/.subversion/config. This file should already have a commented-out line similar to the following:

# global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo

Why use the global-ignores rather than the svn:ignore property? I wanted my svn client to ignore my .git directory, but didn't want to modify the svn:ignore property in the repository. No one else cares about the directory I'm ignoring (.git) - they don't even have that directory.

Here's my new global-ignores line:

global-ignores = .git *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo

In my next post, I'll explain how and why I'm using both Git and Subversion.