这在多大程度上是可能的?有没有这样的包装器(或者前端是更合适的名称(?
例如,关于这将如何工作。使用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
的目的是促进从svn
到git
的过渡。
它通过提供以下功能来实现这一目标:
- 将
Svn
存储库导入本地Git
存储库的方法; - 将提交从本地
Git
存储库发送回中央Svn
存储库的有限方式;它是有限的,因为Svn
仅提供有限的Git
功能子集,并且Svn
功能不是由Git
提供的;此外,Git
团队没有必要努力使git-svn
成为一个完整的Svn
客户端,因为: 正如我之前所说,其目的是帮助Svn
用户进行过渡; - 类似于
Git
的命令行的命令行,添加了特定内容。
在命令行中使用git-svn
一段时间后,您会发现您已经学习了最常用的Git
命令。
在现有脚本中使用svn
确实是想要一个模仿svn
命令行的git-svn
前端的合法理由。
您有两种选择:
- 编写一个包装脚本,该脚本使用
svn
选项接受命令行并将其转换为git-svn
命令行。 - 修改脚本以使用
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
做得更好。