git如何决定在git-svn中使用哪个版本的svn?

时间:2012-06-13 19:15:58

标签: git path git-svn homebrew

我在运行10.7.4的mac上安装了gitsvn与自制程序。 svn中我的计算机上有/usr/bin版本,似乎是git svn正在使用的版本。

$ git --version
git version 1.7.10.4

$ svn --version
svn, version 1.7.5 (r1336830)

$ git svn --version
git-svn version 1.7.10.4 (svn 1.6.17)

$ /usr/bin/svn --version
svn, version 1.6.17 (r1128011)

那么,我可以更改git-svn使用的svn版本吗?如果是这样,我该怎么做呢?

感谢阅读。

- 更新了评论 -

$ which git svn
/usr/local/bin/git
/usr/local/bin/svn

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/usr/local/git/bin

3 个答案:

答案 0 :(得分:7)

我做了一点挖掘,看起来git-svn使用了subversion的perl绑定。经过一些实验,我发现安装升级版本的svn 启用了perl 修复了问题。在Mac OSX上,这将是这样的:

# First, I had to take ownership of the perl libs dir,
# so homebrew could create perl modules
chown $USER -R /Library/Perl/5.12/darwin-thread-multi-2level

# Then, remove and reinstall Subversion, but add the perl option:
brew remove svn
brew install --perl svn

# Lastly, reinstall git (this may be optional, but it may also help.)
brew remove git
brew install git

您的问题归结为一个简单的事实,即您更新的Subversion安装不包含随附的perl模块,因此git-svn正在回退更完整的系统安装。

对于记录,symlinking / usr / bin / svn到/ usr / local / bin / svn绝对没有用。这与$PATH或其他任何事情无关,而与perl模块有关。

答案 1 :(得分:1)

您的系统安装了两个版本的Subversion:/usr/bin/svn中的1.6.17和/usr/local/bin/svn中的1.7.5。当您运行svn时,它会正确解析您的$PATH以获取/usr/local/bin/svn中的git-svn,但/usr/bin不会打扰,只使用{{1}中的版本}}

快速浏览一下代码,git-svn.pl或Alien-SVN(git-svn使用的Perl Subversion库)明确指向任何特定的svn二进制文件,所以我怀疑这是一个安全“功能”,以避免查看您的自定义$PATH

如果您有权访问,则简单选项是将/usr/bin/svn替换为/usr/local/bin/svn;可能通过删除和替换符号链接。否则,我怀疑您需要深入了解git-svn.pl的来源并重写它以接受您的自定义$PATH

答案 2 :(得分:0)

对于那些遇到同样问题的人: 现在GIT可以选择使用Homebrew版本的SVN:

brew install --with-brewed-svn git

希望这有帮助(我在找到它之前挖了很长时间!)