git&svn externals - 最终解决方案了吗?

sti*_*ijn 20 svn git workflow svn-externals

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

  • 在服务器上,执行git svn fetch可能需要数小时的初始值.还要创建一个"构建"分支.
  • 在开发机器上克隆现在很快:git clone srv://project.git, git checkout build然后git update-refs ..., git svn fetch恢复到svn存储库的链接
  • 工作,提交,工作提交,......
  • 检查事情是否正常,git push build服务器并在Hudson中为该分支触发构建
  • 存储工作,以便我可以从另一台机器上工作,也推动构建分支
  • 当满意时,以逻辑步骤(例如每个bug一个)加入提交,提交svn并重置所有内容 git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build

输入svn externals.我已经在这里尝试了每个脚本,但所有脚本都失败了.我的外部设置如下:

/path/to/x x
/path/to/y/z y/z
/path/to/a/b.file a/b.file
Run Code Online (Sandbox Code Playgroud)

并且脚本执行诸如尝试/path/to/x在文件系统的根目录中创建的内容git svn fetch /path/to/x.单个文件似乎也会导致更多问题.(子问题1:这些脚本的svn:externals格式是为什么编写的?)

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

因此,问题是:有没有办法可以复制上述工作流程,只使用某个svn存储库的某些部分,这样我就能在root中执行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
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ter 14

不幸的是,svn的外部非常灵活.我遇到了许多将它们视为<path> <url>的脚本,但也允许<url> <path>.所以我认为有些脚本在这方面已经被打破了.

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