1

我的公司使用 SVN 进行版本控制。我发现我必须同时处理多个错误,这需要对同一个文件进行多次(有时是冲突的)更改,以创建一个我可以开发和修复的环境。本质上,我只是希望能够实例化我的工作流程。

为了让我的工作更轻松,我想在我的本地机器上使用 git 管理实例,同时使用 SVN 使我的本地与公司最新的稳定版本保持同步。

我推测如果我创建一个本地主干线和一个本地“夜间”干线(基本上是最新更新的),我可以做到这一点。我保持每晚更新最新版本,Main 将充当一种“推送点”,我可以将更改提交到公司主干。每当我想创建一个项目时,我都会将 nightly 分支出来,进行更改,合并到 nightly 中,然后将其合并回我的 main 中,并提交给 SVN。

看起来像:

Main    -----------------------------------------------------------------------
           \                                  /
Nightly     -------------------------------------------------------------------
                     \                /
Project               ----------------

如果不是很明显,每晚的重点是让我得到的更新进入我的项目,而不会污染主干。

这行得通吗?可能(可能)有更好的解决方案吗?我希望得到一些反馈。

4

3 回答 3

3

您可以通过在它们之间切换(使用“svn switch”)或使用 Al_G 建议的多个工作副本来使用 SVN 分支。

如果您真的更喜欢基于 Git 的解决方案,请查看以下工具: * SubGit --- 安装在服务器上,为该 SVN 存储库创建一个纯 Git 接口。推送到 Git 的每个提交都将与 SVN 同步,反之亦然。* 如果您无法访问服务器,则可以使用SmartGit或 git-svn:它们具有相似的功能,但 SmartGit 可以更正确地翻译合并(包括樱桃挑选)、忽略和标记。

于 2012-07-05T17:04:23.467 回答
2

我将从评论中得出我的答案。

我一直使用多个分支。我们的布局在主干中具有“现场/现场测试”,并且在分支上进行了所有开发。我刚刚在分支上完成了两个新功能的开发,同时在主干上修复了错误。

通常我会为我正在处理的每个项目创建一个分支(标签)并为其创建一个唯一的目录。因此,如果我有 2 个项目正在进行,那将是这样的;

.../Trunk/
.../Branch1/
.../Branch2/

这节省了每次我想“转移”项目时都必须进行的切换。根据需要(每周至少两到三次),我从主干合并到我的分支中,以使它们保持最新。所有新工作都签入相应的分支。我可以在目录之间移动并“更改分支”而不会有太多痛苦——除了磁盘空间。

当我被清除合并时,我将分支重新集成(合并)回主干。我建议在 SVN 文档中查看Branching and Merging 。

您使用的是 Windows、Linux、OS X 等吗?您将希望获得一个好的 UI 或围绕常见用法的脚本。我在使用Tortoise SVNVisualSVN(不隶属于任何一家公司)的 Windows 上都有一点。

于 2012-07-05T17:01:41.713 回答
1

是的。绝对地。

我有将我的东西合并(即git svn dcommit)到一个名为的分支的设置,该分支svn映射到trunkSVN 存储库。整个开发是通过单独的分支和所有 git 魔法完成的。

唯一重要的是您不会意外svn使用git rebase. 将svn分支视为只能通过一组有限的功能访问的东西,例如

  • git svn fetch更新索引(
  • git svn rebase更新索引并将本地更改重新定位到更新的索引
    (如git pull --rebase
  • git svn dcommit将本地提交推送到trunk
    (如git push

当然,如果您想对 git 的使用保密,请不要使用诸如

02259fd 的修复:忘记了一些东西

如果同事问这样的问题,请不要诚实

已经合并了一切???

进一步阅读:Git MagicGuerilla 版本控制一章

于 2012-07-05T18:56:25.520 回答