Good point about the Ref class being a reusable pair of String and ObjectId.  I think you could use ObjectIdRef.Loose here rather than Source and get everything we need.  It might actually be preferred, because you'll want a short-form for branch names ("master" instead of "refs/heads/master") and we should probably teach Ref how to create those, because its a stateless function and having it on Repository is somewhat useless.

I just wasn't thinking enough when I wrote my comments yesterday and slapped together that Source class.  Sorry.