It is common to have others code lurking in the vendor directory of your project. Many have switched to using piston on the Subversion side of life, and braids fills the same gap over on the git side, but can be used to freeze either subversion or git repos.
Braids (like much of git) is still a little wet behind the ears in the usability department, so don't expect it to hold your hand through the process just yet. An example from today, I got the this message:
2008-03-28 12:26 $ braid add http://async-observer.rubyforge.org/svn/async_observer --type svn vendor/plugins/async_observer
braid: Creating work branch 'braid/track'
braid: Checking out work branch 'braid/track'.
braid: Adding svn mirror from 'http://async-observer.rubyforge.org/svn/async_observer' into 'vendor/plugins/async_observer' using local branch 'braid/svn/vendor/plugins/async-observer'.
braid: Got remote svn revision: 19.
braid: Setting up remote branch and fetching data.
braid: Error occured:
braid: Resetting braid/track to d38137af1951a32f0d217a2c77f3d553890576ba.
braid: Checking out branch 'async'.
braid: An exception has occured: ()
Its those empty parentheses that are really informative ;-) It turned out that I installed git via Macports, then manually installed a newer version in /usr/local/bin. I then had changed my path to have /opt/local/bin behind /usr/local/bin. That worked just fine until last week when some other (not SCM) thing broke and I switched them back (forgetting why I'd switched in the first place). The bottom line is the error above is caused by not having subversion bindings installed right in git. Macports now has a better version to use, so I blew away the custom compiled one and just updated my Macports to be right. I found the comment about subversion bindings at the bottom of this excellent post