作为windows用户,我们创建了一个具有文件夹层次结构的svn repo。底部节点包含svn标准布局:
ProjectA/
ApplicationOne/
ModuleX/
trunk/
branches/
tags/
ApplicationTwo/
ModuleY/
trunk/
branches/
tags/
以此类推。repo现在包含大约100多个具有trunk/branches/tags结构的真实svn项目,但几乎没有一个是顶级的。
我将如何配置subgit来处理此问题?
SubGit可以在两种不同的模式下工作:本地镜像模式和远程镜像模式。下面,您可以找到这些模式的概述以及针对您的特定情况的一些建议。
-
本地镜像模式
在这种模式下,Subversion和Git存储库都位于同一主机上,因此SubGit可以本地访问SVN和Git端。
以下是我提供的基本说明。请在SubGit"本地模式"书中找到详细的文档和常见的陷阱。
-
配置
subgit configure <SVN_REPO> SubGit version <VERSION> build #<BUILD_NUMBER> Detecting paths eligible for translation... done. Subversion to Git mapping has been configured: /ProjectA/ApplicationOne/ModuleX : <SVN_REPO>/git/ProjectA/ApplicationOne/ModuleX.git /ProjectA/ApplicationTwo/ModuleY : <SVN_REPO>/git/ProjectA/ApplicationTwo/ModuleY.git ... CONFIGURATION SUCCESSFUL ...
此命令尝试自动检测存储库布局并在
<SVN_REPO>/conf/subgit.conf
生成配置文件。对于像您这样的大型Subversion存储库,可能需要一段时间。请确保自动生成的配置文件如下所示,必要时进行调整:
... [git "ProjectA/ApplicationOne/ModuleX"] translationRoot = /ProjectA/ApplicationOne/ModuleX repository = git//ProjectA/ApplicationOne/ModuleX.git pathEncoding = UTF-8 trunk = trunk:refs/heads/master branches = branches/*:refs/heads/* shelves = shelves/*:refs/shelves/* tags = tags/*:refs/tags/* ...
-
绘制的作者
在这个阶段,您必须创建/conf/authors.txt文件,将现有的SVN用户名映射到Git作者。有关更多详细信息,请参阅文档。
-
安装
最后,您必须将Subversion存储库导入Git,并通过运行
subgit install
命令启用同步:subgit install repo SubGit version <VERSION> build #<BUILD_NUMBER> Subversion to Git mapping has been found: /ProjectA/ApplicationOne/ModuleX : <SVN_REPO>/git/ProjectA/ApplicationOne/ModuleX.git /ProjectA/ApplicationTwo/ModuleY : <SVN_REPO>/git/ProjectA/ApplicationTwo/ModuleY.git ... Processing '/ProjectA/ApplicationOne/ModuleX' Translating Subversion revisions to Git commits... Processing '/ProjectA/ApplicationTwo/ModuleY' Translating Subversion revisions to Git commits... ... Subversion revisions translated: <REVISIONS_NUMBER>. Total time: <TIME_SPENT> seconds. INSTALLATION SUCCESSFUL
-
Git服务器
当安装结束,并且启用了Subversion和Git存储库之间的同步时,您可以设置一些Git服务器(或重用现有的Apache HTTP服务器)。请参阅相关文档,并在我们的博客中看到几个关于这个主题的帖子:
- VisualSVN服务器和SubGit
- Gitolite和SubGit
-
-
远程镜像模式
使用此模式时,必须仅将SubGit安装到Git存储库中,并使该存储库与托管在不同机器上的远程Subversion服务器同步。
下面你可以找到一些基本的说明。有关更多详细信息,请参阅SubGit"远程模式"手册。
-
配置
在远程镜像模式下,SubGit不会尝试自动检测存储库布局,因此您必须为Subversion存储库中的每个模块运行
subgit configure --svn-url <SVN_URL>
命令:subgit configure --svn-url <SVN_ROOT_URL>/ProjectA/ApplicationOne/ModuleX <GIT_ROOT_DIR>/ProjectA/ApplicationOne/ModuleX.git SubGit version <VERSION> build #<BUILD_NUMBER> Configuring writable Git mirror of remote Subversion repository: Subversion repository URL : <SVN_ROOT_URL>/ProjectA/ApplicationOne/ModuleX Git repository location : <GIT_ROOT_DIR>/ProjectA/ApplicationOne/ModuleX.git CONFIGURATION SUCCESSFUL ...
结果,SubGit为每个Git存储库生成配置文件
<GIT_REPO>/subgit/config
。对于您的情况,此配置文件应如下所示:... [svn] url = <SVN_ROOT_URL>/ProjectA/ApplicationOne/ModuleX trunk = trunk:refs/heads/master branches = branches/*:refs/heads/* tags = tags/*:refs/tags/* shelves = shelves/*:refs/shelves/* fetchInterval = 60 connectTimeout = 30 readTimeout = 60 keepGitCommitTime = false auth = default [auth "default"] passwords = subgit/passwd useDefaultSubversionConfigurationDirectory = false subversionConfigurationDirectory = <SVN_CONFIG_DIR> ...
-
绘制的作者
在这个阶段,您必须创建/subgit/authors.txt文件,将现有的SVN用户名映射到Git作者。有关更多详细信息,请参阅文档。
-
SVN凭证
如果您不使用file://协议,则必须提供必要的凭据,以便SubGit能够针对Subversion服务器进行身份验证。有关更多信息,请阅读SubGit书中的相应章节。
我们还建议在Subversion端启用
pre-revprop-change
挂钩,这会使进一步的安装和维护更加容易,请参阅SubGitBook。 -
安装
最后,您必须将您的Subversion存储库导入Git,并通过运行
subgit install
命令启用同步:subgit install git SubGit version <VERSION> build #<BUILD_NUMBER> Translating Subversion revisions to Git commits... Subversion revisions translated: <REVISIONS_NUMBER>. Total time: <TIME_SPENT> seconds. INSTALLATION SUCCESSFUL
此命令还启动后台进程,该进程轮询SVN服务器,并在出现新修订时获取新修订。基本上,这意味着SubGit为每个Git存储库使用专用流程。有时,避免运行这样的进程并使用一些作业调度程序是有意义的。
-
Git服务器
我在上面提供的那些链接也与远程模式相关。
然而,如果你打算使用Atlassian Stash进行Git托管,你可以使用基于SubGit引擎的SVN镜像插件,它在UI和维护方面提供了更好的体验。
-
根据我们的经验,我们有以下指导方针:
-
如果有许多独立的Subversion存储库,最好在本地镜像模式下使用SubGit,因为它不需要SVN轮询和维护额外的进程。
-
如果是一个包含多个模块的大型Subversion存储库,最好使用file://协议的远程镜像模式,并稍微调整基本设置。
在您的情况下,运行100多个后台进程肯定没有意义,相反,我们建议安装额外的提交后SVN挂钩,该挂钩检查特定模块被给定的修订版修改,然后触发相应Git存储库的同步。
如果您有任何其他问题,请随时在Stack Overflow、我们的问题跟踪器或通过电子邮件与我们联系:support@subgit.com.