The git svn文档 http://git-scm.com/docs/git-svn建议在处理 Subversion 分支时采用以下工作流程:
# Clone a repo (like git clone):
git svn clone http://svn.example.com/project -T trunk -b branches -t tags
# Append svn:ignore settings to the default git exclude file:
git svn show-ignore >> .git/info/exclude
# View all branches and tags you have cloned:
git branch -r
# Create a new branch in SVN
git svn branch waldo
# Reset your master to waldo:
git reset --hard remotes/waldo
# local changes
git add ...
git commit ...
# pull changes on current branch
git svn rebase
# send changes to Subversion
git svn dcommit
# check for new branches
git svn fetch
上面的工作流程适用于在单个 Subversion 分支上进行不间断的更改,您可以享受提交位的便利,但同时处理多个活动 Subversion 和 git 分支有点棘手。
要跟踪 Subversion 存储库的 waldo 分支,请从
git checkout -b waldo-svn remotes/waldo
-svn 后缀是为了避免出现以下形式的警告
warning: refname 'waldo' is ambiguous.
还要提醒您,这个 git 分支用于跟踪 Subversion 分支。始终保持对这些分支的更改呈线性!
要更新 waldo-svn,请运行
git svn rebase
这将从 Subversion 获取更改并在这些更改之上重新设置任何本地更改。它还足够智能,可以识别您的本地更改何时已被上游逐字接受:它将被 Subversion 提交替换,并有一行以git-svn-id: ...
在其提交消息中。
当上游维护者更改补丁的内容和结构时(e.g.、修改代码、将补丁拆分为多个 Subversion 提交,或者将多个补丁合并为一个提交)是解决冲突并试图理清混乱的过程,这就是生活的乐趣所在。
为了完全通用,请保持 git 中的 -svn 分支干净(不进行任何更改),并在 -svn 分支之外创建问题分支。要发送补丁,请使用
git diff waldo-svn waldo-fix-frobnicator
然后当你git svn rebase
为了赶上 Subversion 存储库,您需要查看日志并决定问题分支的相应配置,有点像GTD http://www.davidco.com/what_is_gtd.php对于 git。