2011-01-14 97 views
20

这是我目前使用我的SVN项目工作流程(我从来没有使用svn分支,有些项目是由其他人积极努力的为好):git&svn外部 - 最终的解决方案呢?

  • 在服务器上,做inital git svn fetch可能需要数小时。还要创建一个“构建”分支。
  • 在开发机器克隆现在是快:依次git clone srv://project.git, git checkout build通过git update-refs ..., git svn fetch到链路恢复到svn库
  • 工作,提交,提交工作,...
  • 检查,如果事情是理智的,git push build到服务器并引发哈德森建立分支
  • 存储工作,使我可以从另一台机器工作,还推动成立时建立分支
  • ,加入的逻辑步骤一起提交(例如,一个用于每个错误) ,承诺svn并重置所有内容,如git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build

输入svn外部值。我已经尝试了每个脚本here,但都失败了。我的外部是设置这样的:

/path/to/x x 
/path/to/y/z y/z 
/path/to/a/b.file a/b.file 

和脚本做的事情就像试图在文件系统和git svn fetch /path/to/x的根目录中创建/path/to/x。单个文件似乎也会导致更多问题。 (subquestion 1:什么是svn:externals格式这些脚本是为那么写的?)

它似乎并没有很难修改其中一个脚本来处理我的情况,并复制目录结构我正确后,但后来我留下了一个主要问题:如果我在x和y/z目录中更改文件,我没有看到一种方法将它加入单个svn提交中,这是我开始使用的原因之一git摆在首位。

因此,问题:有没有一种方法可以复制上述工作流程,仅使用特定svn存储库的某些部分,以这种方式可以在根中执行svn dcommit?我更喜欢现成的解决方案,可以在Linux和Windows上运行。

编辑我迅速通过我发现的脚本之一进行了黑客攻击,并使其复制了svn externals的目录结构。我不能克隆,虽然单个文件,这里的输出:

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 

subquestion 2:是不是可以通过取混帐SVN单个文件?

+0

我发现[此脚本](https://github.com/mgee/git-svn-ext)适用于当前版本的SVN和Git 。 – 2013-11-01 14:14:56

+2

@IvanKoblik谢谢你的发帖,尽管我不得不承认我只是放弃了让所有版本库同步,而是强迫所有的同事也只是使用git:P – stijn 2013-11-01 14:21:35

回答

14

不幸的是,svn的外部是非常灵活的。我遇到过很多脚本,它们将它们当作<路径> <url>,但是<url> <路径>也是允许的。所以我认为一些脚本在这方面只是被打破了。

回答你的第二个问题:不。 'git svn fetch'需要在Subversion的repo子树上运行,但它需要像分支一样处理。唯一映射到这个范例中的是一个目录(例如,trunk /)。 FWIW,Bazaar和Mercurial也在这里受苦。在一天结束时,Subversion只是一个版本化的文件系统,而Git有一个分支的第一类概念。这是不合适的阻碍之一。:-(

1

只是另一个关于第二个子问题的注释 据我所知,颠覆到今天还不支持svn externals文件,只有文件夹,所以我猜这些属性的条目是无效的。不知道是否有任何工具可以处理这种情况