这是我目前用于我的 svn 项目的工作流程(我从不使用 svn 分支,有些项目也由其他人积极参与):
- 在服务器上,执行
git svn fetch
可能需要数小时的初始操作。还要创建一个“构建”分支。 - 在开发机器上克隆现在很快:
git clone srv://project.git, git checkout build
然后git update-refs ..., git svn fetch
恢复到 svn 存储库的链接 - 工作,承诺,工作承诺,...
- 检查事情是否正常,
git push build
到服务器并触发该分支的 Hudson 构建 - 存储工作,以便我可以从另一台机器上工作,同时推送构建分支
- 满意后,按逻辑步骤将提交合并在一起(例如,每个错误一个),提交到 svn 并重置所有内容,例如
git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build
输入 svn 外部。我已经在这里尝试了每个脚本,但都失败了。我的外部设置如下:
/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 dcommit?我更喜欢在 linux 和 windows 上都可以使用的即用型解决方案。
编辑我快速破解了我找到的一个脚本,并使其复制了 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 获取单个文件是不可能的吗?