从git到svn的挑选(或者,如何在git中保存项目历史并在svn中发布)

时间:2010-03-19 11:26:10

标签: git workflow git-svn cherry-pick

我处在一个我唯一使用git的位置,其他人都在使用svn。我用'git svn'连接到团队svn,大多数情况下都可以。最近,我最初是在我自己的单独的git repo上开始了一个项目,现在我需要将其中的东西合并到svn中。但是,我仍然希望在不同版本之间不断调整实现。

那么,从我的私人仓库到svn-cloned仓库挑选一些提交的最直接的方法是什么呢?要求是保留完整的本地历史记录,并且每个选择只有一个svn提交。或者是否需要进行一些挤压?

作为实现这一目标的方法,有没有办法让私人仓库成为svn-cloned仓库的另一个来源?

2 个答案:

答案 0 :(得分:2)

你可以在git svn repo git dcommit之前尝试从你的Git回购中提交git graft到git-svn repo的提交。

您的回购提交可以在特殊分支中隔离,可以all kind of squashing进行,以便导出更清晰的历史记录。

答案 1 :(得分:1)

如果您是目前唯一使用git repo的人,您可以考虑在您创建的空subversion克隆之上重新设置所有工作。然后设置一个分支以保持推送到subversion,将每个版本压缩到它上面并将其提交回SVN。

要获得更深入的解决方案,请考虑直接使用git commit-tree - 将其提供给您要提交的树(通过运行git show --format=raw HEAD找到并查看第二行(“树”)) ),正确的父提交(当前在subversion中的任何内容)和stdin上的正确日志消息。这是直接使用管道,您可能想编写一个脚本来为您完成...效果是您创建了一个包含现有提交的文件内容的新提交(与cherry-pick相比,需要由现有提交添加的diff,而不是复制树。)