Installing and running git-svn on Mac OSX 10.4 Tiger
I am shocked at how much time it took me to get git-svn working on my mac. I use MacPorts, which works well most of the time. Sometimes it has problems which makes me really wish for apt-get on OS X. apt-get normally has worked much nicer for me, but can have its issues too. I even occasionally wish for Windows and a simple install.exe which works 95% of the time out of the box. Really I wish Apple would throw some engineer support to MacPorts and make the service rock solid.
I have had git installed and working for awhile, but preparing to switch our main project from Subversion (svn) to git, I thought I should start using git-svn. It seemed smart to use git-svn for awhile to get used to git, before a full switch so I could fall back on svn in a crunch. I decided to start using git-svn, but the first run of the git-svn command caused this error, and I had no idea how much of my night was about to be wasted…
Can't locate SVN/Core.pm in @INC
Searching led to a couple of webpages, but the most useful was getting git to work on OS X Tiger. It had a quick fix that might work or the long route fix. For some lucky people it is just a path problem. I checked if that was the case for me, by the following command
PATH=/opt/local/bin:$PATH; git svn
unfortunately for me I got the same error, OK I need to reinstall SVN with additional bindings…
> sudo port uninstall -f subversion-perlbindings > sudo port install -f subversion-perlbindings
leading to this error:
---> Building serf with target all Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_www_serf/work/serf-0.2.0" && make all " returned error 2 Command output: /opt/local/share/apr-1/build/libtool --silent --mode=compile /usr/bin/gcc-4.0 -O2 -I/opt/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -I. -I/opt/local/include/apr-1 -I/opt/local/include/apr-1 -c -o buckets/aggregate_buckets.lo buckets/aggregate_buckets.c && touch buckets/aggregate_buckets.lo libtool: compile: unable to infer tagged configuration libtool: compile: specify a tag with `--tag' make: *** [buckets/aggregate_buckets.lo] Error 1
I spent some time searching and eventually I find the solution to the serf error. I couldn’t read the blog because it wasn’t in English, but I could read enough to solve my MacPorts serf install problem. I followed these few lines from the blog
cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_www_serf/work/serf-0.2.0 $ sudo ./configure --prefix=/opt/local --with-apr=/opt/local --with-apr-util=/opt/local $ sudo make all $ sudo port install serf
Awesome, I have serf. Now what is next? Back to building svn with perl bindings, that works. Now, let’s build git again since svn with perl bindings is finally installed.
sudo port install git-core +svn
Which fails because of p5-svn-simple
dyld: lazy symbol binding failed: Symbol not found: _Perl_Gthr_key_ptr Referenced from: /usr/local/lib/libsvn_swig_perl-1.0.dylib Expected in: flat namespace
dyld: Symbol not found: _Perl_Gthr_key_ptr Referenced from: /usr/local/lib/libsvn_swig_perl-1.0.dylib Expected in: flat namespace
Error: Status 1 encountered during processing.
OK, I need to get p5-svn-simple working. Searching leads to this thread MacPort errors related to git. Here you will find the amazingly useful comment by Orestis:
“As mentioned move your libsvn_swig_perl* out of /usr/local/lib AND out of /usr/lib into temporary folders.
Uninstall and reinstall subversion-perlbindings
Install p5-svn-simple (and git-core +svn which is what lead me here)
Move the libsvn_swig_perl files back in /usr/lib and /usr/local/lib (or else git svn won’t work).
> cd /usr/local > mv ./lib/libsvn_swig_perl* ./bak/ > sudo port install p5-svn-simple
Sweet that works now
> sudo port install git-core +svn > cd /usr/local > mv ./bak/libsvn_swig_perl* ./lib/
Finally I try to run git-svn, only to see the same ERROR I had from the very beginning! I am about to lose it but decide that I should try the quick fix again to see if it is the path issue…
PATH=/opt/local/bin:$PATH; git svn
It works! Alright now it is just a path problem. So I open up my .bash_profile, and notice I already have that path included
# Setting the path for MacPorts. export PATH=/opt/local/bin:/opt/local/sbin:/Applications/MzScheme\ v352/bin:$PATH
But I also have an additional path added from when I originally built git from source, and it looks like I was running my old broken version of git-svn. So I just had to remove this one line from my .bash_profile
and hours later and with a ton of frustration I have a fully functioning git-svn.
Now that it is working, you can move on to learning git-svn in 5 minutes.