【问题标题】:Subversion Proxy for working offline?用于离线工作的 Subversion 代理?
【发布时间】:2010-11-18 14:23:09
【问题描述】:

在可能无法始终访问 Internet 的客户站点(有几个人)工作并使用 subversion 存储库的最佳方法是什么?

(目前无法迁移到 Git 或 Mercurial)

但是是否可以利用诸如 Git SVN 集成之类的东西来创建代理,该代理充当客户端的 subversion 存储库,并且可以在最后用于将更改同步回 subversion?是否已经有类似的东西可用?

【问题讨论】:

    标签: svn version-control offline


    【解决方案1】:

    您可以使用 Git 或 Bazaar(我猜也是 Mercurial)从 Subversion 结帐,转到客户站点并离线工作,根据需要进行尽可能多的“本地提交”,当您再次连接时,您有多种选择将这些更改返回给 Subversion。让我们快速回顾一下这些步骤。

    1. 使用 Git (git-svn) 或 Bazaar (bzr-svn) 从 Subversion 签出:

      # using Git
      git svn clone SVN_REPO_URL
      # using Bazaar
      bzr branch SVN_REPO_URL
      

      这些并不总是完美的,尤其是在 Subversion 存储库很大的情况下。语法可能也与 Mercurial 相似。尝试您喜欢的工具,如果不起作用,请尝试其他工具。

      请记住,克隆/分支步骤可能需要很长时间,因为这些工具会获取整个存储库,而不仅仅是像 Subversion 这样的最新版本。

    2. 在客户站点(或断开连接,或在咖啡店)工作,并根据需要提交更改。您不需要网络连接,因为这些是分布式 VCS 工具,整个存储库都存在于本地,您的提交将在此本地存储库中。

      请注意,除了能够在本地提交之外,您还可以执行所有其他存储库操作,例如浏览历史记录,因为一切都在本地存储库中。

      当然,您需要熟悉 Git/Bazaar 才能使用它。

    3. 将本地更改返回到 Subversion。主要有两种方式:变基和合并。变基意味着将您的本地更改回退到结帐点,快速转发您错过的 Subversion 存储库中的更改,并在此基础上重放您的更改,然后将这些更改推送到 Subversion。

      使用 Git:

      git svn rebase
      git svn dcommit
      

      使用集市:

      bzr rebase
      bzr push :parent
      

    这是对工具的一种高级使用。一方面,您必须安装额外的插件(git-svn,如果您选择使用 Git,bzr-svnbzr-rewrite,如果您选择使用 Bazaar(尽管这些都包含在 Windows 和 Mac OS X 的默认安装中),并且您需要具备这些工具的应用知识才能有效地使用它们。

    【讨论】:

      【解决方案2】:

      还没有足够的代表发表评论,但我想指出 svk 正式“死”了;该项目不再由以前的维护者改进,这几乎是一个人。本质上,项目的维护者说:“svk 很酷,但是现在大家都知道你应该使用分布式工具,所以它不值得再维护了。”

      可以在 Best Practical 的网站上找到官方的“生命终结”风格博客文章,在他们的blog post 中找到关于该主题的文章。

      也就是说,svk 可能仍然是正确的工具。即使存在 git-svnserver,您也无法使用 SVN 客户端远程执行多个提交。然而,学习 SVK 和学习 git 并没有什么不同。最后,我认为 git-svn 可能是您想要的工具,因为您的用例——使用 SVN 客户端提交多个更改然后推送到服务器——是不可能的。后端可以保持 SVN 或你有什么,但你将不得不学习一些不同的客户端,而 git 可能是正确的。

      【讨论】:

        【解决方案3】:

        其实Git中有一个工具叫git-svn。您可以在这里找到更多信息: http://git-scm.com/docs/git-svn

        您使用 git 作为您的主要 VCS,然后与 SVN 存储库同步。

        【讨论】:

        • 但我现在不想在客户端使用 git。这就是我问题的重点。
        • 我误解了这句话:“但难道不能利用诸如 Git SVN 集成之类的东西来创建一个代理,它就像客户端的颠覆存储库一样”
        • 问题是,如果客户端也必须更改为 git,则每个人都必须学习 git 约定,必须重新配置构建服务器,等等。我的意图只是将我们的 subversion repo 的名称指向代理,并且没有一个客户端会意识到实际的 subversion 服务器不存在。
        • 不幸的是,还没有 git-svnserve 让 Git 作为 Subversion 客户端的服务器(相当于 git-cvsserver 用于 CVS 访问)
        • 有 git-cvsserver 吗?整洁的!但是 git-svnserver 正是我所需要的。也许有人正在研究它......
        【解决方案4】:

        您可以使用SVK,它是一组基于 Subversion 构建的 Perl 脚本,提供了一些类似 DVCS 的功能。我以前使用过 SVK,但只是以一种非常简单的方式。我知道它可以做这种离线代理操作。

        【讨论】:

          【解决方案5】:

          我认为svk 可能会提供您正在寻找的东西。

          【讨论】:

          猜你喜欢
          • 2014-12-07
          • 2013-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-27
          • 2015-06-12
          相关资源
          最近更新 更多