是否有使用“svn”语法的“git-svn”包装器



这在多大程度上是可能的?有没有这样的包装器(或者前端是更合适的名称(?

例如,关于这将如何工作。使用git-svn,您将使用git svn clone <url>而不是svn co <url>(IIRC(,因此在这里包装器将在执行svn co <url>时将其转换为此内容,实际上会执行git svn clone <url>

也许这是一个坏主意,因为可能有无法处理的重要情况(因此第一个问题(。也许这是一个好主意(因此第二个问题(。

(额外的问题是,在某些合理的设置下,是否有可能基于git做类似的事情 - 这是一个包装器,使svn用户能够使用他们习惯的命令,而实际上他们使用git服务器(。

背景是我们目前使用svn并且有一些脚本(或makefile(使用svn命令。我担心的是这一事实会使它不适合使用git-svn(因为那时脚本和 makefile 将不再按预期工作(。

(奖金问题可以被视为切换到git的论据的一部分,如果可以继续使用svn命令,那么说明人们必须学习git的反驳不会那么强烈。

git-svn的目的是促进从svngit的过渡。

它通过提供以下功能来实现这一目标:

  • Svn存储库导入本地Git存储库的方法;
  • 将提交从本地Git存储库发送回中央Svn存储库的有限方式;它是有限的,因为Svn仅提供有限的Git功能子集,并且Svn功能不是由Git提供的;此外,Git团队没有必要努力使git-svn成为一个完整的Svn客户端,因为: 正如我之前所说,其目的是帮助Svn用户进行过渡;
  • 类似于 Git 的命令行的命令行,添加了特定内容。

在命令行中使用git-svn一段时间后,您会发现您已经学习了最常用的Git命令。


在现有脚本中使用svn确实是想要一个模仿svn命令行的git-svn前端的合法理由。

您有两种选择:

  1. 编写一个包装脚本,该脚本使用 svn 选项接受命令行并将其转换为git-svn命令行。
  2. 修改脚本以使用 git-svn 而不是 svn

如果您计划迁移到 git并且git-svn只是一个适应阶段(这是应该的(,那么无论如何您都必须修改脚本以使用 git 而不是 svn 才能完成迁移。

svn命令转换为git-svn命令的简单bash脚本可能如下所示:

#!/bin/bash
SVN_CMD=$1
shift
# If $1 is empty then display some help
# ... not provided here ...
case "$SVN_CMD" in
  "checkout" )
    git svn clone "$@"
  ;;
  "update" )
    git svn fetch "$@"
  ;;
  "add" )
    git add "$@"
  ;;
  "commit" )
    git svn dcommit "$@"
  ;;
esac

对于其中一些命令,您可能需要添加额外的选项以匹配您当前的设置和工作流程。他们中的一些人可能不需要"$@"部分。 这不是一个经过测试的脚本,它只是我现在想象的一个草图。


我认为,更好的选择是让脚本使用svn和它们自己的代码工作副本(作为Svn工作副本(,直到中央存储库迁移到Git。开发人员可以使用git-svn和本地Git存储库,直到他们决定完全切换到Git

这就是我们三年前的做法。一些开发商需要适应时间,他们利用git-svn来缩小差距;其他开发人员直接跳转到Git命令行或各种隐藏技术细节(例如命令行(的Git GUI 界面,让您专注于代码。一个好的Git GUI 客户端是 Atlassian SourceTree 以及许多其他客户端。

当我们最终决定完全切换到Git时,脚本很容易转换和测试。关于存储库,我建议您尝试SubGit进行转换。它比git-svn做得更好。

最新更新