gpt4 book ai didi

subgit - 如何设置subgit来镜像看起来像Windows资源管理器层次结构的svn存储库?

转载 作者:行者123 更新时间:2023-12-04 23:52:44 27 4
gpt4 key购买 nike

作为Windows用户,我们创建了一个带有文件夹层次结构的svn存储库。底部节点包含svn标准布局:

ProjectA/
ApplicationOne/
ModuleX/
trunk/
branches/
tags/
ApplicationTwo/
ModuleY/
trunk/
branches/
tags/


...等等无限。回购现在包含约100多个带有svn / branches / tags结构的真实svn项目,但几乎没有一个在顶层。

我将如何配置subgit来处理呢?

最佳答案

SubGit可以在两种不同的模式下工作:本地镜像模式和远程镜像模式。在下面,您可以找到这些模式的一般概述以及针对您的特定情况的一些建议。


本地镜像模式

在这种模式下,Subversion和Git存储库都位于同一主机上,因此SubGit可以同时访问SVN和Git端。

下面,我提供了基本说明。请在SubGit 'Local Mode' Book中找到详细的文档和常见的陷阱。


组态

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作者。有关更多详细信息,请参考 documentation
安装

最后,您必须将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服务器)。请参考 documentation,并在我们的博客中看到有关此主题的几篇文章:


VisualSVN Server and SubGit
Gitolite and SubGit







远程镜像模式

使用此模式时,必须仅将SubGit安装到Git存储库中,并使该存储库与另一台计算机上托管的远程Subversion服务器保持同步。

您可以在下面找到一些基本说明。有关更多详细信息,请参考 SubGit 'Remote Mode' Book


组态

在远程镜像模式下,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作者。有关更多详细信息,请参考 documentation
SVN凭证

如果您不使用file://协议,则必须提供必要的凭据,以便SubGit能够针对Subversion服务器进行身份验证。有关更多信息,请阅读SubGit Book中的 corresponding chapter

我们还建议在Subversion端启用 pre-revprop-change挂钩,这会使进一步的安装和维护更加容易,请参见 SubGit Book
安装

最后,您必须将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 Mirror Plugin,它在UI和维护方面提供了更好的体验。



根据我们的经验,我们有以下准则:


如果有许多独立的Subversion存储库,则最好在本地镜像模式下使用SubGit,因为它不需要SVN轮询并为此而维护其他进程。
如果一个巨大的Subversion存储库包含许多模块,则最好将远程镜像模式与file://协议一起使用,并稍加调整基本设置。

在您的情况下,运行100个以上的后台进程绝对没有任何意义,而是建议安装其他提交后的SVN钩子,该钩子检查给定修订修改了哪些特定模块,然后触发相应Git存储库的同步。


如果您还有其他问题,请随时在Stack Overflow的 our issue tracker处向我们提问,或通过电子邮件与我们联系:support@subgit.com。

关于subgit - 如何设置subgit来镜像看起来像Windows资源管理器层次结构的svn存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20187431/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com