简介
Subversion 是一个不错的版本控制程序,不需要太多思考即可操作。不幸的是,如果您想避免笨重的、无法审查的重大任务(a known worst practice),您将需要第三方程序来准备任何重要的补丁集。
其中一个名为Git…的第三方程序虽然Git通常使用独立版本控制系统(我们有提示here和链接here如何使用它),但其git rebase -i功能适合基于系列的工作流程。
git svn工作流程
我们在聊天室中推荐的git svn工作流程由Barry DeZonia描述:
1.git svn fetch
2.git checkout -b NewBranch trunk
3.<进行一些编辑和测试、git 添加、git 提交等>
4.git svn fetch
5.gitk ...trunk
- <if not linear development then>
git rebase -i trunk
<finally> 6.`git svn dcommit`
这个想法是首先将本地分支与 Subversion 存储库同步(步骤 1)。
然后开始并处理一个新的主题分支(步骤 2 和 3)。这可能涉及大量重写,甚至与其他开发人员共享分支,就像您在 regular Git workflows 中所做的那样。
当您准备好在 Subversion 中发布补丁系列时,再次同步(步骤 4)并确保 Subversion 的 trunk 顶部不提交。这是必需的,git svn实际上只能应用多个补丁,它无法创建合并提交。如果单独开发,请使用 Git 的rebase命令将其线性化。
为 Subversion 完成一切准备后,使用 git svn 的 dcommit 命令提交当前分支中但尚未在主干中的所有更改。(如果你有兴趣为什么它被称为dcommit:git svn的原始commit子命令是一个历史性的扭曲……)
设置本地工作目录
要开始使用git svn,您需要一个初始的git-svn克隆。实现这一点的简单方法就是开始
git svn clone -s https://code.imagej.net/svn/imagej
这个相对比较慢,因为它使用 Subversion 来检查完整历史记录中的每一个修订。您可以将新的 Git 工作树与我们预先导入的 Git 存储库连接起来,如下所示:
1.git init
- 将这些部分添加到 .git/config 文件中
[remote "origin"] url = git://code.imagej.net/imagej.git pushURL = git@code.imagej.net:imagej.git fetch = +refs/heads/*:refs/remotes/origin/* fetch = +refs/heads/svn/*:refs/remotes/* [svn-remote "svn"] url = http://code.imagej.net/svn/imagej fetch = trunk:refs/remotes/trunk branches = branches/*:refs/remotes/* tags = tags/*:refs/remotes/tags/*3.
git fetch git svn fetch(此步骤需要一些时间…) 5.git checkout -b master -t trunk
说明:我们首先初始化 origin 灯光(步骤 1 到 3),而不是让 git svn 从一开始就完成工作。它被初始化,以便颠覆分支(我们的 Git 存储库在 svn/* 命名空间中公开)被提取到 §§4§§§拾取它们的位置,而不是经历任何引导程序git svn的繁琐的多小时其过程。
在步骤 4 中,git svn确实有一些预导入的分支。
最后,我们初始化本地 master 分支来跟踪 Subversion 的 trunk。