【问题标题】:How to do version control via ftp?如何通过 ftp 进行版本控制?
【发布时间】:2009-11-02 14:05:51
【问题描述】:

我有一个网络开发人员。客户端使用不允许 shell 访问的共享主机,因此无法访问 SVN、Git 等。我试图说服他转向允许它的众多廉价选项之一,但他不会这样做它。如果我在登台服务器上使用版本控制,是否有任何工具可以让我通过 ftp 将更改复制到生产环境?在本地,我有 mac 和 windows,登台服务器是 linux,所以可以在任何这些平台上运行......

【问题讨论】:

    标签: linux version-control deployment ftp


    【解决方案1】:

    使用您的 Linux 登台服务器,您可以保留一个专门用于该主机的单独签出副本,然后使用实用程序将该目录镜像到主机服务器。

    LFTP 对这种事情很有用。它适用于大多数 Linux 发行版,并包含“镜像”功能:

    将指定的源目录镜像到 本地目标目录。如果目标 目录以斜杠结尾,源基名称附加到 目标 目录名称。源和/或目标可以是指向的 URL 目录。

    【讨论】:

      【解决方案2】:

      您需要某种 ftp 镜像软件。没有测试它,但快速搜索给了我this Java application。您可以在最新的签出存储库上运行它。

      【讨论】:

        【解决方案3】:

        保持 SVN repo 和 FTP 副本同步的好处是svn2web。我可以建议为生产副本创建单独的分支并合并到该分支以上传到生产服务器。

        【讨论】:

          【解决方案4】:

          你可能需要编写一个批处理文件来

          1. 导出 SVN 存储库
          2. 通过 FTP 将导出的文件上传到您的 Linux 服务器

          【讨论】:

            【解决方案5】:

            找不到/实现一些支持不可变版本的基于 FUSE 的 CoW 文件系统。我只是找到另一个(对开发人员更友好的)主机。据我所知,没有任何 FTP 服务器本身支持这一点,我也想不出任何优雅的方法可以通过脚本黑客来实现它。

            我可能错了。

            【讨论】:

            • 正如我所说:客户端不会移动主机
            • @sprugman:有些问题在给定的约束下根本无法解决。你不能在火星上写下你的名字,你不能将 FTP 用作 VCS 而不跳过箍。如果 FTP 服务器由 ext3cow.com 分区支持,您可能有一个开始,我至少 尝试 提供了某种解决方案。
            • @tinkertim:我试图取消投票给你,但它不会让我('投票太旧而无法改变')。 FWIW,我并没有真正阅读您最初的帖子作为建议。你写它的方式,对我的推动是:“没有这个听起来不可能的事情(考虑到这个主机的限制性),做你在原始帖子中说的你做不到的事情”,这就是为什么我投反对票。
            • @sprugman:不用担心 :) 关于堆栈溢出的第一条规则是不要谈论堆栈溢出。
            • @sprugman:说真的,不用担心。你确实引用了一个具体的标准,我告诉你这不太可能奏效。不过,我看不出有什么理由编辑我的帖子,如果完整阅读它会很清楚 :) 我还应该提到我很迟钝。
            【解决方案6】:

            这个问题(和答案)现在对我很有帮助,因为我在单独的服务器和 lftp 上通过 gitolite 实现了版本控制。

            这就是我所做的:

            1. Set up gitolite 在我的 ubuntu 登台服务器上
              1. 在暂存服务器上创建了基础仓库(即foo.git
              2. foo.git 克隆到登台服务器上的工作目录中
              3. foo.git 克隆到本地开发机器的工作目录中
            2. 本地开发
            3. 已将更改推送到临时服务器上的 foo.git 存储库
            4. 在登台服务器上,登录到工作目录,并从foo.git 中提取更改
            5. lftp-ed 进入共享主机(就像你上面提到的)
            6. 在共享主机中运行: mirror -R --only-newer --delete --parallel=10 /source/directory/ /target/directory

            mirror 命令选项注意事项:

            • -R - 这会将source/directory 推送到target/directory。 (mirror 在没有这个的情况下从目标拉到源,想想reverse)
            • —only-newer - 如果没有此选项,即使您只更改了一个文件,mirror 命令也会将源目录中的所有文件发送到目标目录。使用此选项,只有更改的(较新的)文件会通过网络传输。
            • —delete - 删除不再在源目录中但仍在目标目录中的文件。我的一项推动涉及删除过期资产。如果没有此选项,在执行 mirror 命令后,相同的文件将保留在我的共享主机上。
            • —parallel=10 - 一次传输 10 个文件(而不是默认情况下的 1 个)。这使流程更快

            虽然这对我有用,但我确信有一些方法可以改进这一点。我很感激这个问题,并认为我会分享我的经验。

            【讨论】:

              【解决方案7】:

              Rsync 将通过 FTP 连接执行此操作。如果您使用的是类 Unix 系统,您可能已经安装了它。

              【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-05-07
              • 2015-06-29
              • 1970-01-01
              • 2014-10-29
              • 1970-01-01
              • 1970-01-01
              • 2011-10-13
              • 2020-11-18
              相关资源
              最近更新 更多