git:svn不是一个git命令 - Mac

15

昨天我没有遇到任何问题,但今天无法再运行git svn。它显示以下消息:

git: 'svn' is not a git command. See 'git --help'.

The most similar commands are
    fsck
    mv
    show

我不知道它是否相关,但自从昨天我更新了npm(6.14.4)和node(v12.6.0)。

我使用的是macOS Catalina操作系统。


你刚刚更新了OS X或命令行工具吗? - Dave Newton
@DaveNewton 不是昨天开始的,我想是上个月。 - Greg
svn 不是 Git 的一部分,你需要单独安装 git-svn,它会添加 git-svn 命令供 git svn 调用。可能某些情况下被取消了安装,或者它没有被设置到 $PATH 环境变量中。由于 svn 不是 Git 内建的工具,这两个工具之间容易出现不协调的情况。 - torek
5个回答

12

感谢BitByteDog提供答案

我在macOS Ventura v13.1下再次遇到了这个问题,并通过安装git-svn解决了这个问题。

brew install git-svn

以下是原始答案。

我在GitHub上找到了一个适用于macOS Big Sur v11.1 (20C69)的简单固定解决方案。

  1. make sure install git, svn, perl with brew.

    brew install git
    brew install perl
    brew install subversion
    
  2. edit /usr/local/Cellar/git/2.30.0/libexec/git-core/git-svn.

    replace #!/usr/bin/perl with #!/usr/local/bin/perl

  3. git svn works.


上述解决方案仅适用于perl 5.32.0。

当我将perl更新到5.32.1后,git svn无法正常工作。

在@INC中找不到SVN/Core.pm(您可能需要安装SVN::Core模块)...

我在GitHub上找到了一个解决方案。

Now subversion built with system perl, so we can add an environment variable to solve this problem:

export PERL5LIB=/usr/local/lib/perl5/site_perl/#{perl_version}/darwin-thread-multi-2level

You should replace #{perl_version} with system perl's version.

For macOS Big Sur:

export PERL5LIB=/usr/local/lib/perl5/site_perl/5.28.2/darwin-thread-multi-2level

在我的 Mac 上,解决这个问题的方法是:git: 'svn' is not a git command.,但随后出现了 Can't locate SVN/Core.pm 错误。感谢你让我更接近解决问题,我还是给你一个 +1。谢谢! - Christiaan Westerbeek
@ChristiaanWesterbeek 我添加了一个新的解决方案,希望能对你有所帮助。 - jqgsninimo
如果在运行此代码时出现“信号11”,很可能是因为被调用的“perl”运行时与链接的库不同。请确保运行“/usr/local/bin/perl --version”(或任何二进制文件+“--version”),并检查版本号是否匹配。结果表明,我需要使用“/usr/bin/perl”才能在我的Big Sur安装中使用5.30.x版本。 - akdom

6

更新:2020年9月

看来这已经是终点了。按照原始建议将永久删除Subversion。我找到了适用于MacOS的验证版本的Subversion,并下载安装了它。然后,我需要将Subversion添加到$PATH变量中,以取代苹果的svn(只会打印一条消息,说明Subversion不再包含在内)。要添加它,请在您的~/.zprofile中添加此行:

export PATH=/opt/subversion/bin:$PATH

这将修复svn。我仍然没有弄清楚如何修复git svn

NB:我也知道可以从homebrew获取Subversion,但是homebrew被我的公司政策禁止。如果homebrew对某人更有效,请在此处发布您的结果。

原始答案:2020年3月

今天发生了同样的事情。软件更新后,git svnsvn消失了。看起来Apple正在XCode中弃用Subversion:

不再通过Xcode提供Subversion的命令行工具支持-包括svn、git-svn和相关命令。如果您需要Subversion或相关命令行工具,请通过运行xcode-select --install安装命令行工具包。(50266910)

同时,我能够通过删除XCode命令行工具并重新安装它们来解决此问题:

sudo rm -Rf /Library/Developer/CommandLineTools
sudo xcode-select --install

之后,git svnsvn又回来了。希望这能让我们在最终停用和删除之前保持运行。


1
截至7月,这对我来说似乎不再起作用了。 - Reece
@Reece,我更新了我的答案以反映我的最新经验。 - deepdivedylan
最终,我放弃了使用OS X来完成这个任务,并启动了一个CentOS 7实例,它可以毫无问题地处理该任务。谢谢。 - Reece

4
  1. 首先使用brew安装git和svn
brew install git
brew install svn
  1. 使用系统默认的perl,路径为/usr/bin/perl

如果您使用brew安装了perl,请卸载它。

brew uninstall perl

使用 which perl 检查是否正在使用路径为 /usr/bin/perl 的系统默认perl。确保git-svn使用 #!/usr/bin/perl,使用以下命令检查git-svn正在使用哪个版本的perl。

$ head -1 $(brew --prefix)/opt/git/libexec/git-core/git-svn
#!/usr/bin/perl
  1. 检查你的 SVN 的 Perl 版本,位于 /usr/local/Cellar/subversion/1.14.1/lib/perl5/site_perl/5.18.4

  2. 如果你遇到了错误 Can't locate SVN/Core.pm in @INC,你还需要设置 PERL5LIB 路径,对于 Catalina 操作系统:

export PERL5LIB=/usr/local/lib/perl5/site_perl/5.18.4/darwin-thread-multi-2level

对于 Big Sur 操作系统:

export PERL5LIB=/usr/local/lib/perl5/site_perl/5.28.2/darwin-thread-multi-2level

参考文献:https://github.com/Homebrew/homebrew-core/issues/52490


谢谢,你的答案帮助我解决了在Big Sur上的问题。 - ismavolk

2
我在将macOS从10.15(Catalina)升级到10.15(Big Sur)后遇到了相同的问题。
非常感谢您的答案jqgsninimo。这3个步骤让我完成了99%的工作。但是,之后我收到了错误提示。
无法在@INC中找到SVN/Core.pm(您可能需要安装SVN::Core模块)(@INC包含:/usr/local/Cellar/git/2.30.0/share/perl5 /Applications/Xcode.app/Contents/Developer/Library/Perl/5.28/darwin-thread-multi-2level /Library/Developer/CommandLineTools/Library/Perl/5.28/darwin-thread-multi-2level /Library/Perl/5.28/darwin-thread-multi-2level /Library/Perl/5.28 /Network/Library/Perl/5.28/darwin-thread-multi-2level /Network/Library/Perl/5.28 /Library/Perl/Updates/5.28.2 /System/Library/Perl/5.28/darwin-thread-multi-2level /System/Library/Perl/5.28 /System/Library/Perl/Extras/5.28/darwin-thread-multi-2level /System/Library/Perl/Extras/5.28),位于/usr/local/Cellar/git/2.30.0/share/perl5/Git/SVN/Utils.pm的第6行。 在/usr/local/Cellar/git/2.30.0/share/perl5/Git/SVN/Utils.pm的第6行失败--编译中止。 在/usr/local/Cellar/git/2.30.0/share/perl5/Git/SVN.pm的第25行,编译失败。 在/usr/local/Cellar/git/2.30.0/share/perl5/Git/SVN.pm的第32行,BEGIN失败--编译中止。 在/usr/local/Cellar/git/2.30.0/libexec/git-core/git-svn的第23行,编译失败。 在/usr/local/Cellar/git/2.30.0/libexec/git-core/git-svn的第23行,BEGIN失败--编译中止。
如果其他人遇到相同的问题,对我来说解决方案是运行这个命令。
export PERL5LIB=/usr/local/lib/perl5/site_perl/5.28.2/darwin-thread-multi-2level

我从这个GitHub答案中找到了命令。

2
在 jqgsninimo 的解决方案之后,这个方法对我很有用。现在,我遇到了一个问题:error: git-svn died of signal 11,但这可能与 SVN 转储本身有关。 - Christiaan Westerbeek
这里也出现了同样的错误,@ChristiaanWesterbeek。但是即使是“git svn help”也失败了,所以我不认为这是svn dump的问题。你解决了吗? - Michael Heumann
不,我最终放弃了。但是另一个开发者让它工作了。我建议在这里使用大锤并尝试另一台电脑。 - Christiaan Westerbeek

2
在 Monterey 上,它只是这样的:
brew install git-svn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接