Git 吉特公司;svn外部-最终解决方案?

Git 吉特公司;svn外部-最终解决方案?,git,svn,workflow,svn-externals,Git,Svn,Workflow,Svn Externals,这是我目前用于svn项目的工作流(我从不使用svn分支,有些项目也由其他人积极参与): 在服务器上,执行initalgit svn fetch,这可能需要几个小时。还要创建一个“构建”分支 在开发机器上克隆现在很快:git克隆srv://project.git,git checkout build然后是git update refs…,git svn fetch以恢复到svn存储库的链接 工作,承诺,工作承诺 为了检查事情是否正常,git将build推送到服务器,并在Hudson中为该分支触发

这是我目前用于svn项目的工作流(我从不使用svn分支,有些项目也由其他人积极参与):

  • 在服务器上,执行inital
    git svn fetch
    ,这可能需要几个小时。还要创建一个“构建”分支
  • 在开发机器上克隆现在很快:
    git克隆srv://project.git,git checkout build
    然后是
    git update refs…,git svn fetch
    以恢复到svn存储库的链接
  • 工作,承诺,工作承诺
  • 为了检查事情是否正常,
    git将build
    推送到服务器,并在Hudson中为该分支触发一个build
  • 要存储工作以便我可以从另一台机器上对其进行操作,还需要推送build branch
  • 满意时,按逻辑步骤将提交连接在一起(例如每个bug一个),提交到svn并重置所有内容,如
    git签出主机、git合并构建、git svn DCOMIT、git push、git签出构建、git rebase主机、git push构建
输入svn externals。我已经试过了每一个脚本,但都失败了。我的外部设置如下:

/path/to/x x
/path/to/y/z y/z
/path/to/a/b.file a/b.file
这些脚本执行的操作包括尝试在文件系统的根目录中创建
/path/to/x
,以及
git svn fetch/path/to/x
。此外,单个文件似乎会导致更多问题。(子问题1:编写这些脚本的svn:externals格式是什么?)

修改其中一个脚本以处理我的情况并正确复制我所追求的目录结构似乎并不困难,但接下来我会遇到一个主要问题:如果我同时更改x和y/z目录中的文件,我看不到一种方法可以将它加入到单个svn提交中,这也是我开始使用git的原因之一

因此产生了一个问题:是否有一种方法可以复制上述工作流,只使用特定svn存储库的一部分,这样我就可以在根目录中执行svn DCOMIT?我更喜欢在linux和windows上都可以使用的现成解决方案

edit我很快就破解了我找到的一个脚本,并使它复制了svn外部的目录结构。但我无法克隆单个文件,以下是输出:

git svn clone -r HEAD srv://svn/repo/path/to/projects.sln
Initialized empty Git repository in xxx/projects.sln/.git/
Invalid filesystem path syntax: REPORT request failed on '/svn/repo/!svn/vcc/default':
  Cannot replace a directory from within at yyy/git/libexec/git-core/git-svn line 5114

子问题2:是否不可能通过git svn获取单个文件?

不幸的是,svn的外部非常灵活。我遇到过许多脚本,它们将它们视为,但也是允许的。因此,我认为一些脚本在这方面是错误的


回答你的第二个子问题:不是。“git svn fetch”需要在Subversion的repo的子树上操作,但它需要像分支一样处理。唯一能很好地映射到这个范例中的是一个目录(例如trunk/)。FWIW、Bazaar和Mercurial也在这里受到影响。归根结底,Subversion只是一个版本化的文件系统,而Git有一个一流的分支概念。这是一个不匹配的因素-(

关于第二个子问题的另一个注释。
据我所知,到目前为止,subversion还不支持文件的svn外部,只支持文件夹。因此,我猜属性中的此类条目将无效。不知道是否有任何工具可以处理此情况。

我发现它适用于当前版本的svn和Git。@IvanKoblik感谢您的发布。尽管我不得不承认,我可以st放弃了让所有存储库保持同步,取而代之的是,ans强迫所有同事也只使用git:在使用git一段时间后,即使使用脚本,也会非常麻烦。我认为git svn并没有将它用于带有外部的svn存储库,您的解决方案是最好的。虽然是一个主要的PITA(特别是在尝试将SVN连接到Git时)文件外部在SVN中是很有可能的。我不知道从何时开始,但从至少4.5版开始随Xcode一起提供的每个SVN命令行客户端都有,而且这些客户端通常都非常过时。IIRC文件外部在客户端和服务器上都需要1.8版或更高版本才能正常工作。